Browse Source

fcl-passrc: resolver: allow overrding test for if/while/repeat condition

git-svn-id: trunk@35887 -
Mattias Gaertner 8 years ago
parent
commit
99990f3596
2 changed files with 12 additions and 4 deletions
  1. 10 3
      packages/fcl-passrc/src/pasresolver.pp
  2. 2 1
      packages/fcl-passrc/tests/tcresolver.pas

+ 10 - 3
packages/fcl-passrc/src/pasresolver.pp

@@ -1153,6 +1153,7 @@ type
     procedure EmitTypeHints(PosEl: TPasElement; aType: TPasType); virtual;
     procedure EmitTypeHints(PosEl: TPasElement; aType: TPasType); virtual;
     function EmitElementHints(PosEl, El: TPasElement): boolean; virtual;
     function EmitElementHints(PosEl, El: TPasElement): boolean; virtual;
     procedure ReplaceProcScopeImplArgsWithDeclArgs(ImplProcScope: TPasProcedureScope);
     procedure ReplaceProcScopeImplArgsWithDeclArgs(ImplProcScope: TPasProcedureScope);
+    procedure CheckConditionExpr(El: TPasExpr; const ResolvedEl: TPasResolverResult); virtual;
     procedure CheckProcSignatureMatch(DeclProc, ImplProc: TPasProcedure);
     procedure CheckProcSignatureMatch(DeclProc, ImplProc: TPasProcedure);
     procedure CheckPendingForwards(El: TPasElement);
     procedure CheckPendingForwards(El: TPasElement);
     procedure ComputeBinaryExpr(Bin: TBinaryExpr;
     procedure ComputeBinaryExpr(Bin: TBinaryExpr;
@@ -4277,6 +4278,14 @@ begin
     end;
     end;
 end;
 end;
 
 
+procedure TPasResolver.CheckConditionExpr(El: TPasExpr;
+  const ResolvedEl: TPasResolverResult);
+begin
+  if ResolvedEl.BaseType<>btBoolean then
+    RaiseMsg(20170216152135,nXExpectedButYFound,sXExpectedButYFound,
+      [BaseTypeNames[btBoolean],BaseTypeNames[ResolvedEl.BaseType]],El);
+end;
+
 procedure TPasResolver.CheckProcSignatureMatch(DeclProc, ImplProc: TPasProcedure
 procedure TPasResolver.CheckProcSignatureMatch(DeclProc, ImplProc: TPasProcedure
   );
   );
 var
 var
@@ -4736,9 +4745,7 @@ var
 begin
 begin
   ResolveExpr(El,rraRead);
   ResolveExpr(El,rraRead);
   ComputeElement(El,ResolvedCond,[rcSkipTypeAlias]);
   ComputeElement(El,ResolvedCond,[rcSkipTypeAlias]);
-  if ResolvedCond.BaseType<>btBoolean then
-    RaiseMsg(20170216152135,nXExpectedButYFound,sXExpectedButYFound,
-      [BaseTypeNames[btBoolean],BaseTypeNames[ResolvedCond.BaseType]],El);
+  CheckConditionExpr(El,ResolvedCond);
 end;
 end;
 
 
 procedure TPasResolver.ResolveNameExpr(El: TPasExpr; const aName: string;
 procedure TPasResolver.ResolveNameExpr(El: TPasExpr; const aName: string;

+ 2 - 1
packages/fcl-passrc/tests/tcresolver.pas

@@ -3967,10 +3967,11 @@ end;
 procedure TTestResolver.TestProcDuplicate;
 procedure TTestResolver.TestProcDuplicate;
 begin
 begin
   StartProgram(false);
   StartProgram(false);
+  Add('type integer = longint;');
   Add('procedure ProcA(i: longint);');
   Add('procedure ProcA(i: longint);');
   Add('begin');
   Add('begin');
   Add('end;');
   Add('end;');
-  Add('procedure ProcA(i: longint);');
+  Add('procedure ProcA(i: integer);');
   Add('begin');
   Add('begin');
   Add('end;');
   Add('end;');
   Add('begin');
   Add('begin');