mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 15:49:26 +02:00
- reverted r11719, there are still some problems with it
git-svn-id: trunk@11720 -
This commit is contained in:
parent
632abdace8
commit
f35051f76e
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user