瀏覽代碼

* Fix from Mattias Gaertner to catch EScannerError and setting FLast* fields

git-svn-id: trunk@35580 -
michael 8 年之前
父節點
當前提交
0a2868b450
共有 1 個文件被更改,包括 14 次插入3 次删除
  1. 14 3
      packages/fcl-passrc/src/pparser.pp

+ 14 - 3
packages/fcl-passrc/src/pparser.pp

@@ -832,8 +832,20 @@ begin
       until not (FCurToken in WhitespaceTokensToIgnore);
     except
       on e: EScannerError do
-        raise EParserError.Create(e.Message,
-          Scanner.CurFilename, Scanner.CurRow, Scanner.CurColumn);
+        begin
+        if po_KeepScannerError in Options then
+          raise e
+        else
+          begin
+          FLastMsgType := mtError;
+          FLastMsgNumber := Scanner.LastMsgNumber;
+          FLastMsgPattern := Scanner.LastMsgPattern;
+          FLastMsg := Scanner.LastMsg;
+          FLastMsgArgs := Scanner.LastMsgArgs;
+          raise EParserError.Create(e.Message,
+            Scanner.CurFilename, Scanner.CurRow, Scanner.CurColumn);
+          end;
+        end;
     end;
     FCurTokenString := Scanner.CurTokenString;
     FTokenBuffer[FTokenBufferSize] := FCurToken;
@@ -3562,7 +3574,6 @@ Var
   PM : TProcedureModifier;
   Done: Boolean;
   ResultEl: TPasResultElement;
-  I : Integer;
   OK : Boolean;
 
 begin