Browse Source

* added type conversion from procvar to procvar (if their arguments are
convertable, two procvars are convertable too) ("merged")

Jonas Maebe 23 years ago
parent
commit
c68fc3adf9
1 changed files with 19 additions and 3 deletions
  1. 19 3
      compiler/types.pas

+ 19 - 3
compiler/types.pas

@@ -223,7 +223,9 @@ interface
     function convertable_paras(paralist1,paralist2 : tlinkedlist; acp : compare_type) : boolean;
     function convertable_paras(paralist1,paralist2 : tlinkedlist; acp : compare_type) : boolean;
 
 
     { true if a function can be assigned to a procvar }
     { true if a function can be assigned to a procvar }
-    function proc_to_procvar_equal(def1:tprocdef;def2:tprocvardef;exact:boolean) : boolean;
+    { changed first argument type to pabstractprocdef so that it can also be }
+    { used to test compatibility between two pprocvardefs (JM)               }
+    function proc_to_procvar_equal(def1:tabstractprocdef;def2:tprocvardef;exact:boolean) : boolean;
 
 
     function get_proc_2_procvar_def(p:tprocsym;d:tprocvardef):tprocdef;
     function get_proc_2_procvar_def(p:tprocsym;d:tprocvardef):tprocdef;
 
 
@@ -415,7 +417,9 @@ implementation
 
 
 
 
     { true if a function can be assigned to a procvar }
     { true if a function can be assigned to a procvar }
-    function proc_to_procvar_equal(def1:tprocdef;def2:tprocvardef;exact:boolean) : boolean;
+    { changed first argument type to pabstractprocdef so that it can also be }
+    { used to test compatibility between two pprocvardefs (JM)               }
+    function proc_to_procvar_equal(def1:tabstractprocdef;def2:tprocvardef;exact:boolean) : boolean;
       const
       const
         po_comp = po_compatibility_options-[po_methodpointer,po_classmethod];
         po_comp = po_compatibility_options-[po_methodpointer,po_classmethod];
       var
       var
@@ -1706,6 +1710,14 @@ implementation
                   if proc_to_procvar_equal(tprocdef(def_from),tprocvardef(def_to),false) then
                   if proc_to_procvar_equal(tprocdef(def_from),tprocvardef(def_to),false) then
                    b:=1;
                    b:=1;
                 end
                 end
+               { procvar -> procvar }
+               else
+                 if (def_from.deftype=procvardef) and
+                    (proc_to_procvar_equal(tprocvardef(def_from),tprocvardef(def_to),false)) then
+                   begin
+                     doconv:=tc_equal;
+                     b := 2;
+                   end
                else
                else
                 { for example delphi allows the assignement from pointers }
                 { for example delphi allows the assignement from pointers }
                 { to procedure variables                                  }
                 { to procedure variables                                  }
@@ -1885,7 +1897,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.59  2001-12-10 14:34:04  jonas
+  Revision 1.60  2001-12-17 12:49:08  jonas
+    * added type conversion from procvar to procvar (if their arguments are
+      convertable, two procvars are convertable too) ("merged")
+
+  Revision 1.59  2001/12/10 14:34:04  jonas
     * fixed type conversions from dynamic arrays to open arrays
     * fixed type conversions from dynamic arrays to open arrays
 
 
   Revision 1.58  2001/12/03 21:48:43  peter
   Revision 1.58  2001/12/03 21:48:43  peter