瀏覽代碼

resolver: fixed call overload with default param

git-svn-id: trunk@39328 -
Mattias Gaertner 7 年之前
父節點
當前提交
541ead0b93
共有 2 個文件被更改,包括 20 次插入5 次删除
  1. 2 5
      packages/fcl-passrc/src/pasresolver.pp
  2. 18 0
      packages/fcl-passrc/tests/tcresolver.pas

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

@@ -1184,7 +1184,6 @@ type
       cToFloatConversion = 2*cIntToIntConversion;
       cTypeConversion = cExact+10000; // e.g. TObject to Pointer
       cLossyConversion = cExact+100000;
-      cCompatibleWithDefaultParams = cLossyConversion+100000;
       cIncompatible = High(integer);
     var
       cTGUIDToString: integer;
@@ -3960,9 +3959,8 @@ begin
     {$IFDEF VerbosePasResolver}
     writeln('TPasResolver.OnFindCallElements Found another candidate, but it is incompatible -> ignore')
     {$ENDIF}
-  else if (Distance>=cCompatibleWithDefaultParams)
-        or (Data^.Distance=Distance)
-        or ((Distance>=cLossyConversion) and (Data^.Distance>=cLossyConversion)) then
+  else if (Data^.Distance=Distance)
+      or ((Distance>=cLossyConversion) and (Data^.Distance>=cLossyConversion)) then
     begin
     // found another compatible one -> collect
     {$IFDEF VerbosePasResolver}
@@ -15471,7 +15469,6 @@ begin
     else
       begin
       // the rest are default params
-      Result:=cCompatibleWithDefaultParams;
       end;
 end;
 

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

@@ -383,6 +383,7 @@ type
     Procedure TestProcOverloadOtherUnit;
     Procedure TestProcOverloadWithBaseTypes;
     Procedure TestProcOverloadWithBaseTypes2;
+    Procedure TestProcOverloadWithDefaultArgs;
     Procedure TestProcOverloadNearestHigherPrecision;
     Procedure TestProcCallLowPrecision;
     Procedure TestProcOverloadUntyped;
@@ -5870,6 +5871,23 @@ begin
   ParseProgram;
 end;
 
+procedure TTestResolver.TestProcOverloadWithDefaultArgs;
+begin
+  StartProgram(false);
+  Add([
+  'type float = type single;',
+  'type integer = longint;',
+  'procedure {#float}DoIt(s: float); external;',
+  'procedure {#longint}DoIt(i: integer; Scale: float = 1.0); external;',
+  'var i: integer;',
+  'begin',
+  '  {@float}DoIt(1.0);',
+  '  {@longint}DoIt(2);',
+  '  {@longint}DoIt(i);',
+  '']);
+  ParseProgram;
+end;
+
 procedure TTestResolver.TestProcOverloadNearestHigherPrecision;
 begin
   StartProgram(false);