Преглед на файлове

fcl-passrc: resolver: check arg access

mattias преди 5 години
родител
ревизия
f8d57c149c
променени са 2 файла, в които са добавени 8 реда и са изтрити 8 реда
  1. 2 2
      compiler/packages/fcl-passrc/src/pasresolver.pp
  2. 6 6
      compiler/packages/fcl-passrc/tests/tcresolver.pas

+ 2 - 2
compiler/packages/fcl-passrc/src/pasresolver.pp

@@ -7302,6 +7302,8 @@ end;
 
 procedure TPasResolver.FinishArgument(El: TPasArgument);
 begin
+  if not (El.Access in [argDefault,argConst,argVar,argOut]) then
+    RaiseMsg(20191018235644,nNotYetImplemented,sNotYetImplemented,[AccessDescriptions[El.Access]],El);
   if El.ArgType<>nil then
     CheckUseAsType(El.ArgType,20190123100049,El);
   if El.ValueExpr<>nil then
@@ -10537,8 +10539,6 @@ begin
   {$IFDEF VerbosePasResolver}
   writeln('TPasResolver.AddArgument ',GetObjName(El));
   {$ENDIF}
-  if El.Access in [argDefault,argConst,argVar,argOut] then
-    RaiseNotYetImplemented(20191018235644,El,AccessNames[El.Access]);
   CurScope:=TopScope;
   if (CurScope=nil) then
     RaiseInvalidScopeForElement(20160922163529,El);

+ 6 - 6
compiler/packages/fcl-passrc/tests/tcresolver.pas

@@ -5994,7 +5994,7 @@ begin
   Add('begin');
   Add('end;');
   Add('begin');
-  CheckResolverException('not yet implemented: a:TPasArgument [20191018235644]',nNotYetImplemented);
+  CheckResolverException('not yet implemented: constref',nNotYetImplemented);
 end;
 
 procedure TTestResolver.TestFunctionResult;
@@ -7167,7 +7167,7 @@ begin
   Add('procedure {#ProcA}ProcA(var {#A}A); forward;');
   Add('procedure {#ProcB}ProcB(const {#B}B); forward;');
   Add('procedure {#ProcC}ProcC(out {#C}C); forward;');
-  Add('procedure {#ProcD}ProcD(constref {#D}D); forward;');
+  //Add('procedure {#ProcD}ProcD(constref {#D}D); forward;');
   Add('procedure ProcA(var A);');
   Add('begin');
   Add('end;');
@@ -7177,15 +7177,15 @@ begin
   Add('procedure ProcC(out C);');
   Add('begin');
   Add('end;');
-  Add('procedure ProcD(constref D);');
-  Add('begin');
-  Add('end;');
+  //Add('procedure ProcD(constref D);');
+  //Add('begin');
+  //Add('end;');
   Add('var i: longint;');
   Add('begin');
   Add('  {@ProcA}ProcA(i);');
   Add('  {@ProcB}ProcB(i);');
   Add('  {@ProcC}ProcC(i);');
-  Add('  {@ProcD}ProcD(i);');
+  //Add('  {@ProcD}ProcD(i);');
   ParseProgram;
 end;