瀏覽代碼

* fix for and ; after the last field in a const record declaration

git-svn-id: trunk@15733 -
marco 15 年之前
父節點
當前提交
7830be5365
共有 1 個文件被更改,包括 17 次插入2 次删除
  1. 17 2
      packages/fcl-passrc/src/pparser.pp

+ 17 - 2
packages/fcl-passrc/src/pparser.pp

@@ -1037,6 +1037,21 @@ var
   n : AnsiString;
   r : TRecordValues;
   a : TArrayValues;
+
+function lastfield:boolean;
+
+begin
+  result:= CurToken<>tkSemicolon;
+  if not result then
+   begin
+     nexttoken;
+     if curtoken=tkbraceclose then
+       result:=true
+     else
+       ungettoken;
+   end; 
+end;
+
 begin
   if CurToken <> tkBraceOpen then
     Result:=DoParseExpression
@@ -1064,14 +1079,14 @@ begin
           NextToken;
           x:=DoParseConstValueExpression();
           r.AddField(n, x);
-          if CurToken=tkSemicolon then
+          if not lastfield then
             repeat
               n:=ExpectIdentifier;
               ExpectToken(tkColon);
               NextToken;
               x:=DoParseConstValueExpression();
               r.AddField(n, x)
-            until CurToken<>tkSemicolon;
+            until lastfield; // CurToken<>tkSemicolon;
           Result:=r;
         end;
     else