浏览代码

fcl-passrc: fixed parsing variable list with modifiers

mattias 6 年之前
父节点
当前提交
8168cc6ccc
共有 2 个文件被更改,包括 5 次插入3 次删除
  1. 3 3
      compiler/packages/fcl-passrc/src/pparser.pp
  2. 2 0
      compiler/packages/pastojs/tests/tcfiler.pas

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

@@ -4262,7 +4262,7 @@ begin
     UngetToken;
     exit;
     end;
-  Include(varMods,ExtMod);
+  Include(VarMods,ExtMod);
   Result:=Result+';'+CurTokenText;
 
   NextToken;
@@ -4373,14 +4373,14 @@ begin
       NextToken;
       If Curtoken<>tkSemicolon then
         UnGetToken;
-      VarEl:=TPasVariable(VarList[0]);
+      VarEl:=TPasVariable(VarList[OldListCount]);
       AllowedVarMods:=[];
       if ExternalStruct then
         AllowedVarMods:=[vmExternal]
       else
         AllowedVarMods:=[vmCVar,vmExternal,vmPublic,vmExport];
       Mods:=GetVariableModifiers(VarEl,VarMods,aLibName,aExpName,AllowedVarMods);
-      if (mods='') and (CurToken<>tkSemicolon) then
+      if (Mods='') and (CurToken<>tkSemicolon) then
         NextToken;
       end
     else

+ 2 - 0
compiler/packages/pastojs/tests/tcfiler.pas

@@ -1736,11 +1736,13 @@ procedure TTestPrecompile.TestPC_Record;
 begin
   StartUnit(false);
   Add([
+  '{$ModeSwitch externalclass}',
   'interface',
   'type',
   '  TRec = record',
   '    i: longint;',
   '    s: string;',
+  '    b: boolean external name ''ext'';',
   '  end;',
   '  P = pointer;', // alias type to built-in type
   '  TArrOfRec = array of TRec;',