Browse Source

fcl-passrc: skip attribute behind proc type

git-svn-id: trunk@37592 -
Mattias Gaertner 7 years ago
parent
commit
9e6330ae2f

+ 1 - 0
packages/fcl-passrc/src/pasresolver.pp

@@ -169,6 +169,7 @@ ToDo:
    - function: enumerator
    - class
    - operator
+- parser: TPasParser.ParseProcedureOrFunctionHeader skip searching proc
 - range checking:
   - indexedprop[param]
   - case-of unique

+ 16 - 5
packages/fcl-passrc/src/pparser.pp

@@ -806,8 +806,8 @@ var
 begin
   {$IFDEF VerbosePasParser}
   writeln('TPasParser.ParseExc Token="',CurTokenText,'"');
+  //writeln('TPasParser.ParseExc ',Scanner.CurColumn,' ',Scanner.CurSourcePos.Column,' ',Scanner.CurTokenPos.Column);
   {$ENDIF}
-  writeln('TPasParser.ParseExc ',Scanner.CurColumn,' ',Scanner.CurSourcePos.Column,' ',Scanner.CurTokenPos.Column);
   SetLastMsg(mtError,MsgNumber,Fmt,Args);
   p:=Scanner.CurTokenPos;
   raise EParserError.Create(SafeFormat(SParserErrorAtToken,
@@ -4520,10 +4520,21 @@ begin
       end
     else if (CurToken = tkSquaredBraceOpen) then
       begin
-      repeat
-        NextToken
-      until CurToken = tkSquaredBraceClose;
-      ExpectToken(tkSemicolon);
+      // [] can be an attribute or FPC's [] modifier
+      if IsProc and ([msFpc, msObjfpc]*CurrentModeswitches<>[]) then
+        begin
+        // FPC's [] modifier
+        repeat
+          NextToken
+        until CurToken = tkSquaredBraceClose;
+        ExpectToken(tkSemicolon);
+        end
+      else
+        begin
+        // attribute
+        UngetToken;
+        Exit;
+        end;
       end
     else
       CheckToken(tkSemicolon);

+ 5 - 0
packages/fcl-passrc/tests/tcresolver.pas

@@ -11072,6 +11072,11 @@ begin
   '    [custom5()] FS: string;',
   '    [customProp] property S: string read FS;',
   '  end;',
+  '  TOnGetCellClass = procedure(Sender: TObject; ACol, ARow:',
+  '   longint; var CellClassType: TObject) of object;',
+  '  [Attr]',
+  '  TBird = class(TObject)',
+  '  end;',
   'var',
   '  [custom6]',
   '  o: TObject;',