Browse Source

* more fixes

peter 25 years ago
parent
commit
de70cf38b3
2 changed files with 12 additions and 4 deletions
  1. 6 1
      compiler/rautils.pas
  2. 6 3
      compiler/types.pas

+ 6 - 1
compiler/rautils.pas

@@ -742,6 +742,7 @@ Begin
        end;
      opr.ref.offset:=procinfo^.return_offset;
      opr.ref.base:= procinfo^.framepointer;
+     opr.ref.options:=ref_parafixup;
      { always assume that the result is valid. }
      procinfo^.funcret_state:=vs_assigned;
      SetupResult:=true;
@@ -775,6 +776,7 @@ Begin
      opr.typ:=OPR_REFERENCE;
      opr.ref.offset:=procinfo^.framepointer_offset;
      opr.ref.base:=procinfo^.framepointer;
+     opr.ref.options:=ref_parafixup;
      SetupOldEBP:=true;
    end
   else
@@ -1552,7 +1554,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.10  2000-11-04 14:25:21  florian
+  Revision 1.11  2000-11-06 22:30:30  peter
+    * more fixes
+
+  Revision 1.10  2000/11/04 14:25:21  florian
     + merged Attila's changes for interfaces, not tested yet
 
   Revision 1.9  2000/10/31 22:30:13  peter

+ 6 - 3
compiler/types.pas

@@ -697,7 +697,7 @@ implementation
          ret_in_acc:=(def^.deftype in [orddef,pointerdef,enumdef,classrefdef]) or
                      ((def^.deftype=stringdef) and (pstringdef(def)^.string_typ in [st_ansistring,st_widestring])) or
                      ((def^.deftype=procvardef) and not(po_methodpointer in pprocvardef(def)^.procoptions)) or
-                     not is_object(def) or
+                     ((def^.deftype=objectdef) and not is_object(def)) or
                      ((def^.deftype=setdef) and (psetdef(def)^.settype=smallset)) or
                      ((def^.deftype=floatdef) and (pfloatdef(def)^.typ=f32bit));
       end;
@@ -716,7 +716,7 @@ implementation
          ret_in_param:=(def^.deftype in [arraydef,recorddef]) or
            ((def^.deftype=stringdef) and (pstringdef(def)^.string_typ in [st_shortstring,st_longstring])) or
            ((def^.deftype=procvardef) and (po_methodpointer in pprocvardef(def)^.procoptions)) or
-           is_object(def) or
+           ((def^.deftype=objectdef) and is_object(def)) or
            ((def^.deftype=setdef) and (psetdef(def)^.settype<>smallset));
       end;
 
@@ -1700,7 +1700,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.18  2000-11-04 14:25:22  florian
+  Revision 1.19  2000-11-06 22:30:30  peter
+    * more fixes
+
+  Revision 1.18  2000/11/04 14:25:22  florian
     + merged Attila's changes for interfaces, not tested yet
 
   Revision 1.17  2000/10/31 22:30:13  peter