Browse Source

+ complex results for assembler functions, fixes bug0155

florian 26 years ago
parent
commit
b73b83a01b
2 changed files with 17 additions and 6 deletions
  1. 6 2
      compiler/cg386cal.pas
  2. 11 4
      compiler/pstatmnt.pas

+ 6 - 2
compiler/cg386cal.pas

@@ -559,7 +559,8 @@ implementation
                                          else
                                            begin
                                              exprasmlist^.concat(new(pai386,op_csymbol_reg(A_MOV,S_L,
-                                               newcsymbol(pobjectdef(p^.methodpointer^.resulttype)^.vmt_mangledname,0),R_ESI)));
+                                               newcsymbol(pobjectdef(
+                                               p^.methodpointer^.resulttype)^.vmt_mangledname,0),R_ESI)));
                                              maybe_concat_external(pobjectdef(p^.methodpointer^.resulttype)^.owner,
                                                pobjectdef(p^.methodpointer^.resulttype)^.vmt_mangledname);
                                            end;
@@ -1299,7 +1300,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.65  1999-02-08 11:29:04  pierre
+  Revision 1.66  1999-02-09 15:45:46  florian
+    + complex results for assembler functions, fixes bug0155
+
+  Revision 1.65  1999/02/08 11:29:04  pierre
    * fix for bug0214
      several problems where combined
      search_class_member did not set srsymtable

+ 11 - 4
compiler/pstatmnt.pas

@@ -1221,16 +1221,20 @@ unit pstatmnt;
                    usedinproc:=usedinproc or ($800 shr word(R_D0))
 {$endif}
                 end
+              {
               else if not is_fpu(procinfo.retdef) then
-              { should we allow assembler functions of big elements ? }
+               should we allow assembler functions of big elements ?
+                YES (FK)!!
                Message(parser_e_asm_incomp_with_function_return);
-           end;
+              }
+            end;
            { set the framepointer to esp for assembler functions }
            { but only if the are no local variables              }
            { added no parameter also (PM)                        }
            if ((aktprocsym^.definition^.options and poassembler)<>0) and
                (aktprocsym^.definition^.localst^.datasize=0) and
-               (aktprocsym^.definition^.parast^.datasize=0) then
+               (aktprocsym^.definition^.parast^.datasize=0) and
+               not(ret_in_param(aktprocsym^.definition^.retdef)) then
                begin
 {$ifdef i386}
                   procinfo.framepointer:=R_ESP;
@@ -1255,7 +1259,10 @@ unit pstatmnt;
 end.
 {
   $Log$
-  Revision 1.62  1999-01-27 13:06:57  pierre
+  Revision 1.63  1999-02-09 15:45:47  florian
+    + complex results for assembler functions, fixes bug0155
+
+  Revision 1.62  1999/01/27 13:06:57  pierre
    * memory leak in case optimization fixed
 
   Revision 1.61  1999/01/25 22:49:09  peter