Browse Source

- reverted r11719, there are still some problems with it

git-svn-id: trunk@11720 -
Jonas Maebe 17 years ago
parent
commit
f35051f76e
3 changed files with 8 additions and 35 deletions
  1. 4 15
      compiler/pdecl.pas
  2. 4 15
      compiler/symbase.pas
  3. 0 5
      compiler/symtable.pas

+ 4 - 15
compiler/pdecl.pas

@@ -293,7 +293,7 @@ implementation
            fieldvarsym :
              pd:=tfieldvarsym(p).vardef
            else
-             internalerror(2008090702);
+             exit;
          end;
          repeat
            again:=false;
@@ -346,11 +346,7 @@ implementation
                   end;
                end;
              recorddef :
-               begin
-                 trecorddef(pd).symtable.forwardchecksyms.ForEachCall(@resolve_type_forward,nil);
-                 { don't free, may still be reused }
-                 trecorddef(pd).symtable.forwardchecksyms.clear;
-               end;
+               trecorddef(pd).symtable.SymList.ForEachCall(@resolve_type_forward,nil);
              objectdef :
                begin
                  if not(m_fpc in current_settings.modeswitches) and
@@ -366,12 +362,7 @@ implementation
                       check objectdefs in objects/records, because these
                       can't exist (anonymous objects aren't allowed) }
                     if not(tsym(p).owner.symtabletype in [ObjectSymtable,recordsymtable]) then
-                      begin
-                        tobjectdef(pd).symtable.forwardchecksyms.ForEachCall(@resolve_type_forward,nil);
-                        { don't free, may still be reused }
-                        tobjectdef(pd).symtable.forwardchecksyms.clear;
-                      end;
-                     
+                     tobjectdef(pd).symtable.SymList.ForEachCall(@resolve_type_forward,nil);
                   end;
                end;
           end;
@@ -600,9 +591,7 @@ implementation
              generictypelist.free;
          until token<>_ID;
          typecanbeforward:=false;
-         symtablestack.top.forwardchecksyms.ForEachCall(@resolve_type_forward,nil);
-         { don't free, may still be reused }
-         symtablestack.top.forwardchecksyms.clear;
+         symtablestack.top.SymList.ForEachCall(@resolve_type_forward,nil);
          block_type:=old_block_type;
       end;
 

+ 4 - 15
compiler/symbase.pas

@@ -92,7 +92,6 @@ interface
           realname  : pshortstring;
           DefList   : TFPObjectList;
           SymList   : TFPHashObjectList;
-          forwardchecksyms : TFPObjectList;
           defowner  : TDefEntry; { for records and objects }
           moduleid  : longint;
           refcount  : smallint;
@@ -215,13 +214,11 @@ implementation
              name:=nil;
              realname:=nil;
            end;
-         symtabletype:=abstractsymtable;
+         symtabletype:=abstracTSymtable;
          symtablelevel:=0;
          defowner:=nil;
          DefList:=TFPObjectList.Create(true);
          SymList:=TFPHashObjectList.Create(true);
-         { the syms are owned by symlist, so don't free }
-         forwardchecksyms:=TFPObjectList.Create(false);
          refcount:=1;
       end;
 
@@ -233,11 +230,9 @@ implementation
           exit;
         Clear;
         DefList.Free;
-        { SymList can already be disposed or set to nil for withsymtable, }
-        { but in that case Free does nothing                              }
-        SymList.Free;
-        forwardchecksyms.free;
-        
+        { SymList can already be disposed or set to nil for withsymtable }
+        if assigned(SymList) then
+          SymList.Free;
         stringdispose(name);
         stringdispose(realname);
       end;
@@ -269,7 +264,6 @@ implementation
         i : integer;
       begin
          SymList.Clear;
-         forwardchecksyms.clear;
          { Prevent recursive calls between TDef.destroy and TSymtable.Remove }
          if DefList.OwnsObjects then
            begin
@@ -306,9 +300,6 @@ implementation
            sym.ChangeOwnerAndName(SymList,Copy(sym.realname,2,255))
          else
            sym.ChangeOwnerAndName(SymList,Upper(sym.realname));
-         { keep track of syms whose type may need forward resolving later on }
-         if (sym.typ in [typesym,fieldvarsym]) then
-           forwardchecksyms.add(sym);
          sym.Owner:=self;
       end;
 
@@ -318,8 +309,6 @@ implementation
         if sym.Owner<>self then
           internalerror(200611121);
         SymList.Remove(sym);
-        if (sym.typ in [typesym,fieldvarsym]) then
-          forwardchecksyms.remove(sym);
       end;
 
 

+ 0 - 5
compiler/symtable.pas

@@ -1060,11 +1060,6 @@ implementation
             def:=TDef(unionst.DefList[i]);
             def.ChangeOwner(self);
           end;
-        { add the types that may need to be forward-checked }
-        forwardchecksyms.capacity:=forwardchecksyms.capacity+unionst.forwardchecksyms.count;
-        for i:=0 to unionst.forwardchecksyms.count-1 do
-          forwardchecksyms.add(tsym(unionst.forwardchecksyms[i]));
-        unionst.forwardchecksyms.clear;
         _datasize:=storesize;
         fieldalignment:=storealign;
       end;