Browse Source

* bugs with assigning related objects and passing objects by reference
to a procedure

florian 27 years ago
parent
commit
73c9c39b22
1 changed files with 14 additions and 3 deletions
  1. 14 3
      compiler/pass_1.pas

+ 14 - 3
compiler/pass_1.pas

@@ -335,8 +335,8 @@ unit pass_1;
               b:=true;
            end
          { object pascal objects }
-         else if (def_from^.deftype=objectdef) and (def_to^.deftype=objectdef) and
-           pobjectdef(def_from)^.isclass and pobjectdef(def_to)^.isclass then
+         else if (def_from^.deftype=objectdef) and (def_to^.deftype=objectdef) {and
+           pobjectdef(def_from)^.isclass and pobjectdef(def_to)^.isclass }then
            begin
               doconv:=tc_equal;
               b:=pobjectdef(def_from)^.isrelated(
@@ -2686,6 +2686,13 @@ unit pass_1;
                         (p^.left^.resulttype^.deftype=pointerdef) and
                         (defcoll^.data^.deftype=pointerdef)
                          ) and
+                   { child classes can be also passed }
+                     not(
+                        (p^.left^.resulttype^.deftype=objectdef) and
+                        (defcoll^.data^.deftype=objectdef) and
+                        pobjectdef(p^.left^.resulttype)^.isrelated(pobjectdef(defcoll^.data))
+                        ) and
+
                    { an implicit file conversion is also allowed }
                    { from a typed file to an untyped one           }
                      not(
@@ -4996,7 +5003,11 @@ unit pass_1;
 end.
 {
   $Log$
-  Revision 1.26  1998-06-04 09:55:39  pierre
+  Revision 1.27  1998-06-05 00:01:06  florian
+    * bugs with assigning related objects and passing objects by reference
+      to a procedure
+
+  Revision 1.26  1998/06/04 09:55:39  pierre
     * demangled name of procsym reworked to become independant of the mangling scheme
 
   Come test_funcret improvements (not yet working)S: ----------------------------------------------------------------------