- reverted r11719, there are still some problems with it

git-svn-id: trunk@11720 -
This commit is contained in:
Jonas Maebe 2008-09-07 12:45:08 +00:00
parent 632abdace8
commit f35051f76e
3 changed files with 8 additions and 35 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;