diff --git a/fcl/passrc/pparser.pp b/fcl/passrc/pparser.pp index 0cc2f019a6..62157323d0 100644 --- a/fcl/passrc/pparser.pp +++ b/fcl/passrc/pparser.pp @@ -36,6 +36,7 @@ resourcestring SParserExpectedColonSemicolon = 'Expected ":" or ";"'; SParserExpectedSemiColonEnd = 'Expected ";" or "End"'; SParserExpectedConstVarID = 'Expected "const", "var" or identifier'; + SParserExpectedColonID = 'Expected ":" or identifier'; SParserSyntaxError = 'Syntax error'; SParserTypeSyntaxError = 'Syntax error in type'; SParserArrayTypeSyntaxError = 'Syntax error in array type'; @@ -1370,8 +1371,15 @@ begin ptOperator: begin ParseArgList(Element, Element.Args, tkBraceClose); - TPasFunctionType(Element).ResultEl.Name := ExpectIdentifier; - ExpectToken(tkColon); + NextToken; + if (CurToken=tkIdentifier) then begin + TPasFunctionType(Element).ResultEl.Name := CurTokenName; + ExpectToken(tkColon); + end + else if (CurToken=tkColon) then + TPasFunctionType(Element).ResultEl.Name := 'Result' + else + ParseExc(SParserExpectedColonID); if Assigned(Element) then // !!! TPasFunctionType(Element).ResultEl.ResultType := ParseType(Parent) else @@ -1409,13 +1417,17 @@ begin begin { El['calling-conv'] := 'stdcall';} ExpectToken(tkSemicolon); + end else if (CurToken = tkIdentifier) and (UpperCase(CurTokenString) = 'COMPILERPROC') then + begin +{ El['calling-conv'] := 'compilerproc';} + ExpectToken(tkSemicolon); end else if (CurToken = tkInline) then begin { TPasProcedure(Parent).IsInline := True;} ExpectToken(tkSemicolon); end else if (CurToken = tkIdentifier) and (UpperCase(CurTokenString) = 'DEPRECATED') then begin -{ El['calling-conv'] := 'cdecl';} +{ El['calling-conv'] := 'deprecated';} ExpectToken(tkSemicolon); end else if (CurToken = tkIdentifier) and (UpperCase(CurTokenString) = 'EXTERNAL') then begin