Pārlūkot izejas kodu

* allow accessing locals in other lexlevel when the current assembler
routine doesn't have locals.

peter 23 gadi atpakaļ
vecāks
revīzija
cdf0df1808
2 mainītis faili ar 15 papildinājumiem un 4 dzēšanām
  1. 8 1
      compiler/pstatmnt.pas
  2. 7 3
      compiler/rautils.pas

+ 8 - 1
compiler/pstatmnt.pas

@@ -1129,6 +1129,9 @@ implementation
               { but with another name, so that recursive calls are possible }
               { but with another name, so that recursive calls are possible }
               symtablestack.insert(aktprocdef.funcretsym);
               symtablestack.insert(aktprocdef.funcretsym);
               symtablestack.rename(aktprocdef.funcretsym.name,'$result');
               symtablestack.rename(aktprocdef.funcretsym.name,'$result');
+              { update the symtablesize back to 0 if there were no locals }
+              if not haslocals then
+               symtablestack.datasize:=0;
               { set the used flag for the return }
               { set the used flag for the return }
               if ret_in_acc(aktprocdef.rettype.def) then
               if ret_in_acc(aktprocdef.rettype.def) then
                 begin
                 begin
@@ -1185,7 +1188,11 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.45  2002-01-24 18:25:49  peter
+  Revision 1.46  2002-01-29 21:32:03  peter
+    * allow accessing locals in other lexlevel when the current assembler
+      routine doesn't have locals.
+
+  Revision 1.45  2002/01/24 18:25:49  peter
    * implicit result variable generation for assembler routines
    * implicit result variable generation for assembler routines
    * removed m_tp modeswitch, use m_tp7 or not(m_fpc) instead
    * removed m_tp modeswitch, use m_tp7 or not(m_fpc) instead
 
 

+ 7 - 3
compiler/rautils.pas

@@ -844,7 +844,7 @@ Begin
                 end
                 end
               else
               else
                 begin
                 begin
-                  if (procinfo^.framepointer=stack_pointer) and
+                  if (aktprocdef.localst.datasize=0) and
                      assigned(procinfo^.parent) and
                      assigned(procinfo^.parent) and
                      (lexlevel=tvarsym(sym).owner.symtablelevel+1) and
                      (lexlevel=tvarsym(sym).owner.symtablelevel+1) and
                      { same problem as above !!
                      { same problem as above !!
@@ -884,7 +884,7 @@ Begin
                     opr.ref.base:=procinfo^.framepointer
                     opr.ref.base:=procinfo^.framepointer
                   else
                   else
                     begin
                     begin
-                      if (procinfo^.framepointer=stack_pointer) and
+                      if (aktprocdef.localst.datasize=0) and
                          assigned(procinfo^.parent) and
                          assigned(procinfo^.parent) and
                          (lexlevel=tvarsym(sym).owner.symtablelevel+1) and
                          (lexlevel=tvarsym(sym).owner.symtablelevel+1) and
                          {(procinfo^.parent^.sym.definition.localst=tvarsym(sym).owner) and}
                          {(procinfo^.parent^.sym.definition.localst=tvarsym(sym).owner) and}
@@ -1585,7 +1585,11 @@ end;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.26  2002-01-24 18:25:50  peter
+  Revision 1.27  2002-01-29 21:32:03  peter
+    * allow accessing locals in other lexlevel when the current assembler
+      routine doesn't have locals.
+
+  Revision 1.26  2002/01/24 18:25:50  peter
    * implicit result variable generation for assembler routines
    * implicit result variable generation for assembler routines
    * removed m_tp modeswitch, use m_tp7 or not(m_fpc) instead
    * removed m_tp modeswitch, use m_tp7 or not(m_fpc) instead