瀏覽代碼

* Fix bug ID #31690

git-svn-id: trunk@35896 -
michael 8 年之前
父節點
當前提交
57e9677088
共有 2 個文件被更改,包括 15 次插入2 次删除
  1. 2 1
      packages/fcl-passrc/src/pparser.pp
  2. 13 1
      packages/fcl-passrc/tests/tcstatements.pas

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

@@ -2805,7 +2805,8 @@ begin
         if Declarations is TProcedureBody then
           begin
           Proc:=Declarations.Parent as TPasProcedure;
-          if not (pmAssembler in Proc.Modifiers) then
+          // Assembler keyword is optional in Delphi mode (bug 31690)
+          if not ((pmAssembler in Proc.Modifiers) or (msDelphi in CurrentModeswitches)) then
             ParseExc(nParserExpectTokenError,SParserExpectTokenError,['begin']);
           SetBlock(declNone);
           ParseProcAsmBlock(TProcedureBody(Declarations));

+ 13 - 1
packages/fcl-passrc/tests/tcstatements.pas

@@ -110,8 +110,9 @@ Type
     Procedure TestTryExceptOn2;
     Procedure TestTryExceptOnElse;
     Procedure TestTryExceptOnIfElse;
-    procedure  TestTryExceptRaise;
+    procedure TestTryExceptRaise;
     Procedure TestAsm;
+    Procedure TestAsmBlock;
     Procedure TestGotoInIfThen;
   end;
 
@@ -1647,6 +1648,17 @@ begin
   AssertEquals('token 4 ','1',T.Tokens[3]);
 end;
 
+procedure TTestStatementParser.TestAsmBlock;
+begin
+  Source.Add('{$MODE DELPHI}');
+  Source.Add('function BitsHighest(X: Cardinal): Integer;');
+  Source.Add('asm');
+  Source.Add('end;');
+  Source.Add('begin');
+  Source.Add('end.');
+  ParseModule;
+end;
+
 Procedure TTestStatementParser.TestGotoInIfThen;
 
 begin