mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 08:09:33 +02:00
Adjust tfieldvarsym (and by extension tabstractvarsym) so that it can be created as not registered if needed.
git-svn-id: trunk@32372 -
This commit is contained in:
parent
fe39de1573
commit
922646d106
@ -343,7 +343,7 @@ implementation
|
||||
{ create static fields representing all enums }
|
||||
for i:=0 to tenumdef(def).symtable.symlist.count-1 do
|
||||
begin
|
||||
fsym:=cfieldvarsym.create(tenumsym(tenumdef(def).symtable.symlist[i]).realname,vs_final,enumclass,[]);
|
||||
fsym:=cfieldvarsym.create(tenumsym(tenumdef(def).symtable.symlist[i]).realname,vs_final,enumclass,[],true);
|
||||
enumclass.symtable.insert(fsym);
|
||||
sym:=make_field_static(enumclass.symtable,fsym);
|
||||
{ add alias for the field representing ordinal(0), for use in
|
||||
@ -373,12 +373,12 @@ implementation
|
||||
if tenumdef(def).has_jumps then
|
||||
begin
|
||||
{ add field for the value }
|
||||
fsym:=cfieldvarsym.create('__fpc_fenumval',vs_final,s32inttype,[]);
|
||||
fsym:=cfieldvarsym.create('__fpc_fenumval',vs_final,s32inttype,[],true);
|
||||
enumclass.symtable.insert(fsym);
|
||||
tobjectsymtable(enumclass.symtable).addfield(fsym,vis_strictprivate);
|
||||
{ add class field with hash table that maps from FPC-declared ordinal value -> enum instance }
|
||||
juhashmap:=search_system_type('JUHASHMAP').typedef;
|
||||
fsym:=cfieldvarsym.create('__fpc_ord2enum',vs_final,juhashmap,[]);
|
||||
fsym:=cfieldvarsym.create('__fpc_ord2enum',vs_final,juhashmap,[],true);
|
||||
enumclass.symtable.insert(fsym);
|
||||
make_field_static(enumclass.symtable,fsym);
|
||||
{ add custom constructor }
|
||||
@ -435,7 +435,7 @@ implementation
|
||||
"Values" instance method -- that's also the reason why we insert the
|
||||
field only now, because we cannot disable duplicate identifier
|
||||
checking when creating the "Values" method }
|
||||
fsym:=cfieldvarsym.create('$VALUES',vs_final,arrdef,[]);
|
||||
fsym:=cfieldvarsym.create('$VALUES',vs_final,arrdef,[],true);
|
||||
fsym.visibility:=vis_strictprivate;
|
||||
enumclass.symtable.insert(fsym,false);
|
||||
sym:=make_field_static(enumclass.symtable,fsym);
|
||||
|
@ -266,7 +266,7 @@ implementation
|
||||
to it from the structure or linking will fail }
|
||||
if symtablestack.top.symtabletype in [recordsymtable,ObjectSymtable] then
|
||||
begin
|
||||
sym:=cfieldvarsym.create(orgname,varspez,hdef,[]);
|
||||
sym:=cfieldvarsym.create(orgname,varspez,hdef,[],true);
|
||||
symtablestack.top.insert(sym);
|
||||
sym:=make_field_static(symtablestack.top,tfieldvarsym(sym));
|
||||
end
|
||||
|
@ -1512,7 +1512,7 @@ implementation
|
||||
sorg:=orgpattern;
|
||||
if token=_ID then
|
||||
begin
|
||||
vs:=cfieldvarsym.create(sorg,vs_value,generrordef,[]);
|
||||
vs:=cfieldvarsym.create(sorg,vs_value,generrordef,[],true);
|
||||
|
||||
{ normally the visibility is set via addfield, but sometimes
|
||||
we collect symbols so we can add them in a batch of
|
||||
@ -1739,7 +1739,7 @@ implementation
|
||||
begin
|
||||
consume(_ID);
|
||||
consume(_COLON);
|
||||
fieldvs:=cfieldvarsym.create(sorg,vs_value,generrordef,[]);
|
||||
fieldvs:=cfieldvarsym.create(sorg,vs_value,generrordef,[],true);
|
||||
variantdesc^^.variantselector:=fieldvs;
|
||||
symtablestack.top.insert(fieldvs);
|
||||
end;
|
||||
|
@ -481,18 +481,18 @@ implementation
|
||||
type is not available. The rtti for pvmt will be written implicitly
|
||||
by thev tblarray below }
|
||||
systemunit.insert(ctypesym.create('$pvmt',pvmttype,true));
|
||||
addfield(hrecst,cfieldvarsym.create('$length',vs_value,ptrsinttype,[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$mlength',vs_value,ptrsinttype,[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$parent',vs_value,pvmttype,[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$length',vs_value,ptrsinttype,[],true));
|
||||
addfield(hrecst,cfieldvarsym.create('$mlength',vs_value,ptrsinttype,[],true));
|
||||
addfield(hrecst,cfieldvarsym.create('$parent',vs_value,pvmttype,[],true));
|
||||
{ it seems vmttype is used both for TP objects and Delphi classes,
|
||||
so the next entry could either be the first virtual method (vm1)
|
||||
(object) or the class name (class). We can't easily create separate
|
||||
vtable formats for both, as gdb is hard coded to search for
|
||||
__vtbl_ptr_type in all cases (JM) }
|
||||
addfield(hrecst,cfieldvarsym.create('$vm1_or_classname',vs_value,cpointerdef.create(cshortstringtype),[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$vm1_or_classname',vs_value,cpointerdef.create(cshortstringtype),[],true));
|
||||
vmtarraytype:=carraydef.create(0,0,s32inttype);
|
||||
tarraydef(vmtarraytype).elementdef:=voidpointertype;
|
||||
addfield(hrecst,cfieldvarsym.create('$__pfn',vs_value,vmtarraytype,[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$__pfn',vs_value,vmtarraytype,[],true));
|
||||
addtype('$__vtbl_ptr_type',vmttype);
|
||||
vmtarraytype:=carraydef.create(0,1,s32inttype);
|
||||
tarraydef(vmtarraytype).elementdef:=pvmttype;
|
||||
@ -500,14 +500,14 @@ implementation
|
||||
end;
|
||||
{ Add a type for methodpointers }
|
||||
hrecst:=trecordsymtable.create('',1,current_settings.alignment.recordalignmin,current_settings.alignment.maxCrecordalign);
|
||||
addfield(hrecst,cfieldvarsym.create('$proc',vs_value,voidcodepointertype,[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$self',vs_value,voidpointertype,[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$proc',vs_value,voidcodepointertype,[],true));
|
||||
addfield(hrecst,cfieldvarsym.create('$self',vs_value,voidpointertype,[],true));
|
||||
methodpointertype:=crecorddef.create('',hrecst);
|
||||
addtype('$methodpointer',methodpointertype);
|
||||
{ Add a type for nested proc pointers }
|
||||
hrecst:=trecordsymtable.create('',1,current_settings.alignment.recordalignmin,current_settings.alignment.maxCrecordalign);
|
||||
addfield(hrecst,cfieldvarsym.create('$proc',vs_value,voidcodepointertype,[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$parentfp',vs_value,parentfpvoidpointertype,[]));
|
||||
addfield(hrecst,cfieldvarsym.create('$proc',vs_value,voidcodepointertype,[],true));
|
||||
addfield(hrecst,cfieldvarsym.create('$parentfp',vs_value,parentfpvoidpointertype,[],true));
|
||||
nestedprocpointertype:=crecorddef.create('',hrecst);
|
||||
addtype('$nestedprocpointer',nestedprocpointertype);
|
||||
symtablestack.pop(systemunit);
|
||||
|
@ -1199,7 +1199,7 @@ implementation
|
||||
fieldvardef:=cpointerdef.getreusable(vardef)
|
||||
else
|
||||
fieldvardef:=vardef;
|
||||
result:=cfieldvarsym.create(sym.realname,vs_value,fieldvardef,[]);
|
||||
result:=cfieldvarsym.create(sym.realname,vs_value,fieldvardef,[],true);
|
||||
if nestedvarsst.symlist.count=0 then
|
||||
include(tfieldvarsym(result).varoptions,vo_is_first_field);
|
||||
nestedvarsst.insert(result);
|
||||
|
@ -4299,7 +4299,7 @@ implementation
|
||||
end
|
||||
else
|
||||
pname:=@optionalname;
|
||||
sym:=cfieldvarsym.create(pname^,vs_value,def,[]);
|
||||
sym:=cfieldvarsym.create(pname^,vs_value,def,[],true);
|
||||
symtable.insert(sym);
|
||||
trecordsymtable(symtable).addfield(sym,vis_hidden);
|
||||
result:=sym;
|
||||
@ -6847,7 +6847,7 @@ implementation
|
||||
tObjectSymtable(symtable).datasize:=align(tObjectSymtable(symtable).datasize,sizeof(pint));
|
||||
tObjectSymtable(symtable).alignrecord(tObjectSymtable(symtable).datasize,sizeof(pint));
|
||||
end;
|
||||
vmt_field:=cfieldvarsym.create('_vptr$'+objname^,vs_value,voidpointertype,[]);
|
||||
vmt_field:=cfieldvarsym.create('_vptr$'+objname^,vs_value,voidpointertype,[],true);
|
||||
hidesym(vmt_field);
|
||||
tObjectSymtable(symtable).insert(vmt_field);
|
||||
tObjectSymtable(symtable).addfield(tfieldvarsym(vmt_field),vis_hidden);
|
||||
|
@ -179,7 +179,7 @@ interface
|
||||
{ could also be part of tabstractnormalvarsym, but there's }
|
||||
{ one byte left here till the next 4 byte alignment }
|
||||
addr_taken : boolean;
|
||||
constructor create(st:tsymtyp;const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions);
|
||||
constructor create(st:tsymtyp;const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions;doregister:boolean);
|
||||
constructor ppuload(st:tsymtyp;ppufile:tcompilerppufile);
|
||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||
procedure buildderef;override;
|
||||
@ -215,7 +215,7 @@ interface
|
||||
{$else symansistr}
|
||||
cachedmangledname: pshortstring; { mangled name for ObjC or Java }
|
||||
{$endif symansistr}
|
||||
constructor create(const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions);virtual;
|
||||
constructor create(const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions;doregister:boolean);virtual;
|
||||
constructor ppuload(ppufile:tcompilerppufile);
|
||||
{ do not override this routine in platform-specific subclasses,
|
||||
override ppuwrite_platform instead }
|
||||
@ -1583,9 +1583,9 @@ implementation
|
||||
TABSTRACTVARSYM
|
||||
****************************************************************************}
|
||||
|
||||
constructor tabstractvarsym.create(st:tsymtyp;const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions);
|
||||
constructor tabstractvarsym.create(st:tsymtyp;const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions;doregister:boolean);
|
||||
begin
|
||||
inherited create(st,n,true);
|
||||
inherited create(st,n,doregister);
|
||||
vardef:=def;
|
||||
varspez:=vsp;
|
||||
varstate:=vs_declared;
|
||||
@ -1737,9 +1737,9 @@ implementation
|
||||
TFIELDVARSYM
|
||||
****************************************************************************}
|
||||
|
||||
constructor tfieldvarsym.create(const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions);
|
||||
constructor tfieldvarsym.create(const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions;doregister:boolean);
|
||||
begin
|
||||
inherited create(fieldvarsym,n,vsp,def,vopts);
|
||||
inherited create(fieldvarsym,n,vsp,def,vopts,doregister);
|
||||
fieldoffset:=-1;
|
||||
end;
|
||||
|
||||
@ -1829,7 +1829,7 @@ implementation
|
||||
|
||||
constructor tabstractnormalvarsym.create(st:tsymtyp;const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions);
|
||||
begin
|
||||
inherited create(st,n,vsp,def,vopts);
|
||||
inherited create(st,n,vsp,def,vopts,true);
|
||||
fillchar(localloc,sizeof(localloc),0);
|
||||
fillchar(currentregloc,sizeof(localloc),0);
|
||||
fillchar(initialloc,sizeof(initialloc),0);
|
||||
@ -2198,14 +2198,14 @@ implementation
|
||||
|
||||
constructor tabsolutevarsym.create(const n : string;def:tdef);
|
||||
begin
|
||||
inherited create(absolutevarsym,n,vs_value,def,[]);
|
||||
inherited create(absolutevarsym,n,vs_value,def,[],true);
|
||||
ref:=nil;
|
||||
end;
|
||||
|
||||
|
||||
constructor tabsolutevarsym.create_ref(const n : string;def:tdef;_ref:tpropaccesslist);
|
||||
begin
|
||||
inherited create(absolutevarsym,n,vs_value,def,[]);
|
||||
inherited create(absolutevarsym,n,vs_value,def,[],true);
|
||||
ref:=_ref;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user