mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 20:39:25 +02:00
* remove sym from ttype, we can now reference any def in any unit directly
git-svn-id: trunk@5063 -
This commit is contained in:
parent
ca6f992504
commit
71af18855e
@ -208,7 +208,7 @@ implementation
|
||||
symtablestack.top.insert(sym);
|
||||
{ procvar can have proc directives, but not type references }
|
||||
if (tt.def.deftype=procvardef) and
|
||||
(tt.sym=nil) then
|
||||
(tt.def.typesym=nil) then
|
||||
begin
|
||||
{ support p : procedure;stdcall=nil; }
|
||||
if try_to_consume(_SEMICOLON) then
|
||||
@ -329,7 +329,7 @@ implementation
|
||||
if assigned(srsym) and
|
||||
(srsym.typ=typesym) then
|
||||
begin
|
||||
tabstractpointerdef(pd).pointertype.setsym(srsym);
|
||||
tabstractpointerdef(pd).pointertype.setdef(ttypesym(srsym).restype.def);
|
||||
{ avoid wrong unused warnings web bug 801 PM }
|
||||
inc(ttypesym(srsym).refs);
|
||||
{ we need a class type for classrefdef }
|
||||
@ -485,19 +485,19 @@ implementation
|
||||
{ read the type definition }
|
||||
read_named_type(tt,orgtypename,nil,generictypelist,false);
|
||||
{ update the definition of the type }
|
||||
newtype.restype:=tt;
|
||||
if assigned(tt.sym) then
|
||||
istyperenaming:=true
|
||||
else
|
||||
tt.sym:=newtype;
|
||||
if isunique and assigned(tt.def) then
|
||||
if assigned(tt.def) then
|
||||
begin
|
||||
tt.setdef(tstoreddef(tt.def).getcopy);
|
||||
include(tt.def.defoptions,df_unique);
|
||||
newtype.restype:=tt;
|
||||
if assigned(tt.def.typesym) then
|
||||
istyperenaming:=true;
|
||||
if isunique then
|
||||
begin
|
||||
tt.setdef(tstoreddef(tt.def).getcopy);
|
||||
include(tt.def.defoptions,df_unique);
|
||||
end;
|
||||
if not assigned(tt.def.typesym) then
|
||||
tt.def.typesym:=newtype;
|
||||
end;
|
||||
if assigned(tt.def) and not assigned(tt.def.typesym) then
|
||||
tt.def.typesym:=newtype;
|
||||
newtype.restype:=tt;
|
||||
{ KAZ: handle TGUID declaration in system unit }
|
||||
if (cs_compilesystem in aktmoduleswitches) and not assigned(rec_tguid) and
|
||||
(typename='TGUID') and { name: TGUID and size=16 bytes that is 128 bits }
|
||||
|
@ -1364,7 +1364,6 @@ implementation
|
||||
unionsymtable.datasize:=maxsize;
|
||||
unionsymtable.fieldalignment:=maxalignment;
|
||||
uniontype.def:=uniondef;
|
||||
uniontype.sym:=nil;
|
||||
UnionSym:=tfieldvarsym.create('$case',vs_value,uniontype,[]);
|
||||
unionsymtable.addalignmentpadding;
|
||||
{$ifdef powerpc}
|
||||
|
@ -1413,7 +1413,7 @@ implementation
|
||||
|
||||
typesym :
|
||||
begin
|
||||
htype.setsym(srsym);
|
||||
htype:=ttypesym(srsym).restype;
|
||||
if not assigned(htype.def) then
|
||||
begin
|
||||
again:=false;
|
||||
|
@ -229,19 +229,7 @@ implementation
|
||||
tt:=generrortype;
|
||||
exit;
|
||||
end;
|
||||
{ Use the definitions for current unit, because
|
||||
they can be refered from the parameters and symbols are not
|
||||
loaded at that time. Only write the definition when the
|
||||
symbol is the real owner of the definition (not a redefine) }
|
||||
if (ttypesym(srsym).owner.symtabletype in [staticsymtable,globalsymtable]) and
|
||||
ttypesym(srsym).owner.iscurrentunit and
|
||||
(
|
||||
(ttypesym(srsym).restype.def.typesym=nil) or
|
||||
(srsym=ttypesym(srsym).restype.def.typesym)
|
||||
) then
|
||||
tt.setdef(ttypesym(srsym).restype.def)
|
||||
else
|
||||
tt.setsym(srsym);
|
||||
tt.setdef(ttypesym(srsym).restype.def);
|
||||
end;
|
||||
|
||||
|
||||
|
@ -149,11 +149,9 @@ interface
|
||||
|
||||
ttype = object
|
||||
def : tdef;
|
||||
sym : tsym;
|
||||
deref : tderef;
|
||||
procedure reset;
|
||||
procedure setdef(p:tdef);
|
||||
procedure setsym(p:tsym);
|
||||
procedure resolve;
|
||||
procedure buildderef;
|
||||
end;
|
||||
@ -543,23 +541,12 @@ implementation
|
||||
procedure ttype.reset;
|
||||
begin
|
||||
def:=nil;
|
||||
sym:=nil;
|
||||
end;
|
||||
|
||||
|
||||
procedure ttype.setdef(p:tdef);
|
||||
begin
|
||||
def:=p;
|
||||
sym:=nil;
|
||||
end;
|
||||
|
||||
|
||||
procedure ttype.setsym(p:tsym);
|
||||
begin
|
||||
sym:=p;
|
||||
def:=p.gettypedef;
|
||||
if not assigned(def) then
|
||||
internalerror(1234005);
|
||||
end;
|
||||
|
||||
|
||||
@ -569,18 +556,7 @@ implementation
|
||||
begin
|
||||
p:=deref.resolve;
|
||||
if assigned(p) then
|
||||
begin
|
||||
if p is tsym then
|
||||
begin
|
||||
setsym(tsym(p));
|
||||
if not assigned(def) then
|
||||
internalerror(200212272);
|
||||
end
|
||||
else
|
||||
begin
|
||||
setdef(tdef(p));
|
||||
end;
|
||||
end
|
||||
setdef(tdef(p))
|
||||
else
|
||||
reset;
|
||||
end;
|
||||
@ -588,20 +564,7 @@ implementation
|
||||
|
||||
procedure ttype.buildderef;
|
||||
begin
|
||||
{ Write symbol references when the symbol is a redefine,
|
||||
but don't write symbol references for the current unit
|
||||
and for the system unit }
|
||||
if assigned(sym) and
|
||||
(
|
||||
(sym<>def.typesym) or
|
||||
(
|
||||
not((sym.owner.symtabletype in [globalsymtable,staticsymtable]) and
|
||||
sym.owner.iscurrentunit)
|
||||
)
|
||||
) then
|
||||
deref.build(sym)
|
||||
else
|
||||
deref.build(def);
|
||||
deref.build(def);
|
||||
end;
|
||||
|
||||
|
||||
@ -1013,7 +976,6 @@ implementation
|
||||
begin
|
||||
getderef(t.deref);
|
||||
t.def:=nil;
|
||||
t.sym:=nil;
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user