Przeglądaj źródła

* fixed crash when current_procinfo was not yet available

peter 21 lat temu
rodzic
commit
b5d1220bef
1 zmienionych plików z 18 dodań i 12 usunięć
  1. 18 12
      compiler/nld.pas

+ 18 - 12
compiler/nld.pas

@@ -269,19 +269,22 @@ implementation
                inc(tvarsym(symtableentry).refs);
                { Nested variable? The we need to load the framepointer of
                  the parent procedure }
-               if (symtable.symtabletype in [localsymtable,parasymtable]) and
-                  (symtable.symtablelevel<>current_procinfo.procdef.parast.symtablelevel) then
+               if assigned(current_procinfo) then
                  begin
-                   if assigned(left) then
-                     internalerror(200309289);
-                   left:=cloadparentfpnode.create(tprocdef(symtable.defowner));
-                   { reference in nested procedures, variable needs to be in memory }
-                   make_not_regable(self);
+                   if (symtable.symtabletype in [localsymtable,parasymtable]) and
+                      (symtable.symtablelevel<>current_procinfo.procdef.parast.symtablelevel) then
+                     begin
+                       if assigned(left) then
+                         internalerror(200309289);
+                       left:=cloadparentfpnode.create(tprocdef(symtable.defowner));
+                       { reference in nested procedures, variable needs to be in memory }
+                       make_not_regable(self);
+                     end;
+                   { static variables referenced in procedures, variable needs to be in memory }
+                   if (symtable.symtabletype=staticsymtable) and
+                      (symtable.symtablelevel<>current_procinfo.procdef.localst.symtablelevel) then
+                     make_not_regable(self);
                  end;
-               { static variables referenced in procedures, variable needs to be in memory }
-               if (symtable.symtabletype=staticsymtable) and
-                  (symtable.symtablelevel<>current_procinfo.procdef.parast.symtablelevel) then
-                 make_not_regable(self);
                { fix self type which is declared as voidpointer in the
                  definition }
                if vo_is_self in tvarsym(symtableentry).varoptions then
@@ -1163,7 +1166,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.133  2004-10-11 15:48:15  peter
+  Revision 1.134  2004-10-12 14:35:14  peter
+    * fixed crash when current_procinfo was not yet available
+
+  Revision 1.133  2004/10/11 15:48:15  peter
     * small regvar for para fixes
     * function tvarsym.is_regvar added
     * tvarsym.getvaluesize removed, use getsize instead