Browse Source

* allow default parameters in equal_paras

peter 23 years ago
parent
commit
007d85fa90
1 changed files with 16 additions and 9 deletions
  1. 16 9
      compiler/defbase.pas

+ 16 - 9
compiler/defbase.pas

@@ -214,15 +214,15 @@ interface
              var doconv : tconverttype;
              var doconv : tconverttype;
              fromtreetype : tnodetype;
              fromtreetype : tnodetype;
              explicit : boolean) : byte;
              explicit : boolean) : byte;
-             
+
     { this routine is recusrive safe, and is used by the
     { this routine is recusrive safe, and is used by the
       checking of overloaded assignment operators ONLY!
       checking of overloaded assignment operators ONLY!
-    }  
+    }
     function overloaded_assignment_isconvertable(def_from,def_to : tdef;
     function overloaded_assignment_isconvertable(def_from,def_to : tdef;
              var doconv : tconverttype;
              var doconv : tconverttype;
              fromtreetype : tnodetype;
              fromtreetype : tnodetype;
              explicit : boolean; var overload_procs : pprocdeflist) : byte;
              explicit : boolean; var overload_procs : pprocdeflist) : byte;
-             
+
 
 
     { Same as is_equal, but with error message if failed }
     { Same as is_equal, but with error message if failed }
     function CheckTypes(def1,def2 : tdef) : boolean;
     function CheckTypes(def1,def2 : tdef) : boolean;
@@ -386,7 +386,11 @@ implementation
               def1:=TParaItem(def1.next);
               def1:=TParaItem(def1.next);
               def2:=TParaItem(def2.next);
               def2:=TParaItem(def2.next);
            end;
            end;
-         if (def1=nil) and (def2=nil) then
+         { when both lists are empty then the parameters are equal. Also
+           when one list is empty and the other has a parameter with default
+           value assigned then the parameters are also equal }
+         if ((def1=nil) and ((def2=nil) or assigned(def2.defaultvalue))) or
+            ((def2=nil) and ((def1=nil) or assigned(def1.defaultvalue))) then
            equal_paras:=true
            equal_paras:=true
          else
          else
            equal_paras:=false;
            equal_paras:=false;
@@ -1277,7 +1281,7 @@ implementation
        end;
        end;
 *)
 *)
     { this is an internal routine to take care of recursivity }
     { this is an internal routine to take care of recursivity }
-    function internal_assignment_overloaded(from_def,to_def : tdef; 
+    function internal_assignment_overloaded(from_def,to_def : tdef;
         var overload_procs : pprocdeflist) : tprocdef;
         var overload_procs : pprocdeflist) : tprocdef;
      var
      var
        p :pprocdeflist;
        p :pprocdeflist;
@@ -1323,8 +1327,8 @@ implementation
     { Returns:
     { Returns:
        0 - Not convertable
        0 - Not convertable
        1 - Convertable
        1 - Convertable
-       2 - Convertable, but not first choice 
-    }   
+       2 - Convertable, but not first choice
+    }
     function isconvertable(def_from,def_to : tdef;
     function isconvertable(def_from,def_to : tdef;
              var doconv : tconverttype;
              var doconv : tconverttype;
              fromtreetype : tnodetype;
              fromtreetype : tnodetype;
@@ -1336,7 +1340,7 @@ implementation
         isconvertable:=overloaded_assignment_isconvertable(def_from,def_to,
         isconvertable:=overloaded_assignment_isconvertable(def_from,def_to,
           doconv, fromtreetype, explicit,p);
           doconv, fromtreetype, explicit,p);
       end;
       end;
-      
+
     function overloaded_assignment_isconvertable(def_from,def_to : tdef;
     function overloaded_assignment_isconvertable(def_from,def_to : tdef;
              var doconv : tconverttype;
              var doconv : tconverttype;
              fromtreetype : tnodetype;
              fromtreetype : tnodetype;
@@ -1949,7 +1953,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.10  2002-09-08 11:10:17  carl
+  Revision 1.11  2002-09-15 17:54:46  peter
+    * allow default parameters in equal_paras
+
+  Revision 1.10  2002/09/08 11:10:17  carl
     * bugfix 2109 (bad imho, but only way)
     * bugfix 2109 (bad imho, but only way)
 
 
   Revision 1.9  2002/09/07 15:25:02  peter
   Revision 1.9  2002/09/07 15:25:02  peter