Explorar o código

fcl-pasrc: error if exports section inside inside procedure

mattias %!s(int64=3) %!d(string=hai) anos
pai
achega
2fa60d1af3

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

@@ -3618,7 +3618,10 @@ begin
     tkConst:
       SetBlock(declConst);
     tkexports:
-      SetBlock(declExports);
+      if Declarations is TPasSection then
+        SetBlock(declExports)
+      else
+        ParseExcTokenError(TokenInfos[tkbegin]);
     tkResourcestring:
       if Declarations is TPasSection then
         SetBlock(declResourcestring)

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

@@ -986,6 +986,7 @@ type
     Procedure TestLibrary_ExportFunc_NameIntFail;
     Procedure TestLibrary_ExportFunc_IndexStringFail;
     Procedure TestLibrary_ExportVar; // ToDo
+    Procedure TestLibrary_ExportLocFuncFail;
     Procedure TestLibrary_Initialization_Finalization;
     Procedure TestLibrary_ExportFuncOverloadFail;
     Procedure TestLibrary_UnitExports;
@@ -18852,6 +18853,20 @@ begin
   ParseLibrary;
 end;
 
+procedure TTestResolver.TestLibrary_ExportLocFuncFail;
+begin
+  StartLibrary(false);
+  Add([
+  'procedure Run;',
+  'exports',
+  '  Run;',
+  'begin',
+  'end;',
+  'begin',
+  '']);
+  CheckParserException('Expected "begin"',nParserExpectTokenError);
+end;
+
 procedure TTestResolver.TestLibrary_Initialization_Finalization;
 begin
   StartLibrary(false);