- removed maxcrecordalign parameter/field from recordsymtables, as this value

cannot be modified in the settings (so we can directly use the one from
    current_settings)

git-svn-id: trunk@42447 -
This commit is contained in:
Jonas Maebe 2019-07-14 19:24:32 +00:00
parent c932dfaf70
commit d8903ce6b3
19 changed files with 117 additions and 198 deletions

View File

@ -393,7 +393,7 @@ type
maxcrecordalign: specify maximum C record alignment (no equivalent in
source code)
}
function begin_anonymous_record(const optionalname: string; packrecords, recordalign, recordalignmin, maxcrecordalign: shortint): trecorddef; virtual;
function begin_anonymous_record(const optionalname: string; packrecords, recordalign, recordalignmin: shortint): trecorddef; virtual;
function end_anonymous_record: trecorddef; virtual;
{ add a placeholder element at the current position that later can be
@ -1399,7 +1399,7 @@ implementation
result.ofs:=0;
{ pack the data, so that we don't add unnecessary null bytes after the
constant string }
begin_anonymous_record('$'+get_dynstring_rec_name(stringtype,false,len),1,sizeof(TConstPtrUInt),1,1);
begin_anonymous_record('$'+get_dynstring_rec_name(stringtype,false,len),1,sizeof(TConstPtrUInt),1);
string_symofs:=get_string_symofs(stringtype,false);
{ encoding }
emit_tai(tai_const.create_16bit(encoding),u16inttype);
@ -1611,7 +1611,7 @@ implementation
if (typ<>st_widestring) or
not winlike then
begin
result:=crecorddef.create_global_internal('$'+name,1,1,1);
result:=crecorddef.create_global_internal('$'+name,1,1);
{ encoding }
result.add_field_by_def('',u16inttype);
{ element size }
@ -1637,8 +1637,7 @@ implementation
else
begin
result:=crecorddef.create_global_internal('$'+name,4,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ length in bytes }
result.add_field_by_def('',s32inttype);
streledef:=cwidechartype;
@ -1689,8 +1688,7 @@ implementation
result.lab:=startlab;
datatcb.begin_anonymous_record('$'+get_dynstring_rec_name(st_widestring,true,strlength),
4,4,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
datatcb.emit_tai(Tai_const.Create_32bit(strlength*cwidechartype.size),s32inttype);
{ can we optimise by placing the string constant label at the
required offset? }
@ -1749,7 +1747,7 @@ implementation
result.ofs:=0;
{ pack the data, so that we don't add unnecessary null bytes after the
constant string }
begin_anonymous_record('',1,sizeof(TConstPtrUInt),1,1);
begin_anonymous_record('',1,sizeof(TConstPtrUInt),1);
dynarray_symofs:=get_dynarray_symofs;
{ what to do if ptrsinttype <> sizesinttype??? }
emit_tai(tai_const.create_sizeint(-1),ptrsinttype);
@ -1928,7 +1926,7 @@ implementation
end;
function ttai_typedconstbuilder.begin_anonymous_record(const optionalname: string; packrecords, recordalign, recordalignmin, maxcrecordalign: shortint): trecorddef;
function ttai_typedconstbuilder.begin_anonymous_record(const optionalname: string; packrecords, recordalign, recordalignmin: shortint): trecorddef;
var
anonrecorddef: trecorddef;
typesym: ttypesym;
@ -1949,7 +1947,7 @@ implementation
end;
end;
{ create skeleton def }
anonrecorddef:=crecorddef.create_global_internal(optionalname,packrecords,recordalignmin,maxcrecordalign);
anonrecorddef:=crecorddef.create_global_internal(optionalname,packrecords,recordalignmin);
trecordsymtable(anonrecorddef.symtable).recordalignment:=recordalign;
{ generic aggregate housekeeping }
begin_aggregate_internal(anonrecorddef,true);

View File

@ -197,8 +197,7 @@ uses
tcb:=ctai_typedconstbuilder.create([tcalo_new_section,tcalo_vectorized_dead_strip_end,tcalo_data_force_indirect,tcalo_is_public_asm]);
tcb.begin_anonymous_record(internaltypeprefixName[itp_emptyrec],
default_settings.packrecords,sizeof(pint),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
current_asmdata.AsmLists[al_resourcestrings].concatList(
tcb.get_final_asmlist_vectorized_dead_strip(
tcb.end_anonymous_record,'RESSTR','',current_module.localsymtable,sizeof(pint)

View File

@ -68,7 +68,7 @@ interface
record consisting of 4 longints must be returned as a record consisting of
two int64's on x86-64. This function is used to create (and reuse)
temporary recorddefs for such purposes.}
function llvmgettemprecorddef(const fieldtypes: array of tdef; packrecords, recordalignmin, maxcrecordalign: shortint): trecorddef;
function llvmgettemprecorddef(const fieldtypes: array of tdef; packrecords, recordalignmin: shortint): trecorddef;
{ get the llvm type corresponding to a parameter, e.g. a record containing
two integer int64 for an arbitrary record split over two individual int64
@ -862,7 +862,7 @@ implementation
end;
function llvmgettemprecorddef(const fieldtypes: array of tdef; packrecords, recordalignmin, maxcrecordalign: shortint): trecorddef;
function llvmgettemprecorddef(const fieldtypes: array of tdef; packrecords, recordalignmin: shortint): trecorddef;
var
i: longint;
res: PHashSetItem;
@ -920,7 +920,7 @@ implementation
if not assigned(res^.Data) then
begin
res^.Data:=crecorddef.create_global_internal(typename,packrecords,
recordalignmin,maxcrecordalign);
recordalignmin);
for i:=low(fieldtypes) to high(fieldtypes) do
trecorddef(res^.Data).add_field_by_def('F'+tostr(i),fieldtypes[i]);
end;
@ -1023,8 +1023,7 @@ implementation
retloc:=retloc^.next;
until not assigned(retloc);
result:=llvmgettemprecorddef(slice(retdeflist,i),C_alignment,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
include(result.defoptions,df_llvm_no_struct_packing);
end;

View File

@ -148,8 +148,7 @@ implementation
exactly two fields in this struct) }
landingpaddef:=llvmgettemprecorddef([voidpointertype,u32inttype],
1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
reg:=hlcg.getregisterfordef(list,landingpaddef);
landingpad:=taillvm.landingpad(reg,landingpaddef,{clause}nil);
list.concat(landingpad);

View File

@ -385,13 +385,12 @@ implementation
arraydef:
{ in an array, all elements come right after each other ->
replace with a packed record }
newdef:=crecorddef.create_global_internal('',1,1,1);
newdef:=crecorddef.create_global_internal('',1,1);
recorddef,
objectdef:
newdef:=crecorddef.create_global_internal('',
tabstractrecordsymtable(tabstractrecorddef(info.def).symtable).recordalignment,
tabstractrecordsymtable(tabstractrecorddef(info.def).symtable).recordalignmin,
tabstractrecordsymtable(tabstractrecorddef(info.def).symtable).maxCrecordalign);
tabstractrecordsymtable(tabstractrecorddef(info.def).symtable).recordalignmin);
else
internalerror(2015122401);
end;

View File

@ -177,8 +177,7 @@ implementation
fields[1]:=pd.getcopyas(procvardef,pc_address_only,'');
fields[2]:=voidpointertype;
itemdef:=llvmgettemprecorddef(fields,C_alignment,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
include(itemdef.defoptions,df_llvm_no_struct_packing);
tcb:=ctai_typedconstbuilder.create([tcalo_new_section]);
tllvmtai_typedconstbuilder(tcb).appendingdef:=true;

View File

@ -486,13 +486,13 @@ implementation
end;
{ create a temp to store parameter values }
vardispatchparadef:=crecorddef.create_global_internal('',voidpointertype.size,voidpointertype.size,current_settings.alignment.maxCrecordalign);
vardispatchparadef:=crecorddef.create_global_internal('',voidpointertype.size,voidpointertype.size);
{ the size will be set once the vardistpatchparadef record has been completed }
params:=ctempcreatenode.create(vardispatchparadef,0,tt_persistent,false);
addstatement(statements,params);
tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_new_section]);
tcb.begin_anonymous_record('',1,sizeof(pint),1,1);
tcb.begin_anonymous_record('',1,sizeof(pint),1);
if not variantdispatch then { generate a tdispdesc record }
begin

View File

@ -205,8 +205,7 @@ implementation
para : tparavarsym;
begin
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
totalcount:=0;
rtticount:=0;
@ -241,8 +240,7 @@ implementation
def.init_paraloc_info(callerside);
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_rtti_reference(tcb,def.returndef,fullrtti);
write_callconv(tcb,def);
@ -256,8 +254,7 @@ implementation
para:=tparavarsym(def.paras[k]);
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
if is_open_array(para.vardef) or is_array_of_const(para.vardef) then
write_rtti_reference(tcb,tarraydef(para.vardef).elementdef,fullrtti)
@ -297,8 +294,7 @@ implementation
{ TTypeInfo, always packed and doesn't need alignment }
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_header]+tostr(length(name)),1,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
if def.typ=arraydef then
InternalError(201012211);
tcb.emit_tai(Tai_const.Create_8bit(typekind),u8inttype);
@ -400,14 +396,12 @@ implementation
loctcb:=ctai_typedconstbuilder.create([tcalo_is_lab,tcalo_make_dead_strippable,tcalo_apply_constalign]);
loctcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
loctcb.emit_ord_const(length(locs),u8inttype);
for i:=low(locs) to high(locs) do
begin
loctcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
loctcb.emit_ord_const(locs[i].loctype,u8inttype);
loctcb.emit_ord_const(locs[i].regsub,u8inttype);
loctcb.emit_ord_const(locs[i].regindex,u16inttype);
@ -519,8 +513,7 @@ implementation
tcb.start_internal_data_builder(current_asmdata.AsmLists[al_rtti],sec_rodata,'',datatcb,tbllbl);
datatcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
datatcb.emit_ord_const(list.count,u32inttype);
entrydef:=get_recorddef(itp_init_mop_offset_entry,[voidcodepointertype,sizeuinttype],defaultpacking);
@ -865,8 +858,7 @@ implementation
begin
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tcb.emit_ord_const(published_properties_count(st),u16inttype);
for i:=0 to st.SymList.Count-1 do
begin
@ -886,8 +878,7 @@ implementation
tcb.begin_anonymous_record(
propdefname,
1,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
if ppo_indexed in tpropertysym(sym).propoptions then
proctypesinfo:=$40
else
@ -950,8 +941,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_ansistr],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
tcb.emit_ord_const(def.encoding,u16inttype);
tcb.end_anonymous_record;
@ -997,13 +987,11 @@ implementation
and o2s arrays for llvm (otherwise we have to write out the entire
type definition every time we access an element from this record) }
tcb.begin_anonymous_record(internaltypeprefixName[itp_rtti_enum_size_start_rec]+def.unique_id_str,defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
tcb.next_field_name:='typ_union_rec';
tcb.begin_anonymous_record(internaltypeprefixName[itp_rtti_enum_size_start_rec2]+def.unique_id_str,defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
case longint(def.size) of
1 :
tcb.emit_ord_const(otUByte,u8inttype);
@ -1021,16 +1009,14 @@ implementation
We need to adhere to this, otherwise things will break. }
tcb.next_field_name:='min_max_rec';
tcb.begin_anonymous_record(internaltypeprefixName[itp_rtti_enum_min_max_rec]+def.unique_id_str,defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tcb.emit_ord_const(def.min,s32inttype);
tcb.emit_ord_const(def.max,s32inttype);
tcb.next_field_name:='basetype_array_rec';
{ all strings must appear right after each other -> from now on
packrecords 1 (but the start must still be aligned) }
tcb.begin_anonymous_record(internaltypeprefixName[itp_rtti_enum_basetype_array_rec]+def.unique_id_str,1,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ write base type }
write_rtti_reference(tcb,def.basedef,rt);
for i:=0 to def.symtable.SymList.Count-1 do
@ -1101,15 +1087,13 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_ord_outer]+elesize,
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
tcb.emit_ord_const(byte(trans[def.ordtype]),u8inttype);
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_ord_inner]+elesize,
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{Convert to longint to smuggle values in high(longint)+1..high(cardinal) into asmlist.}
case deftrans of
otUQWord:
@ -1166,8 +1150,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_1byte],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
tcb.emit_ord_const(ftCurr,u8inttype);
tcb.end_anonymous_record;
@ -1188,8 +1171,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_1byte],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
tcb.emit_ord_const(translate[def.floattype],u8inttype);
tcb.end_anonymous_record;
@ -1202,14 +1184,12 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_set_outer],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_set_middle],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
case def.size of
1:
tcb.emit_ord_const(otUByte,u8inttype);
@ -1223,8 +1203,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_set_inner],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tcb.emit_ord_const(def.size,sizesinttype);
write_rtti_reference(tcb,def.elementdef,rt);
tcb.end_anonymous_record;
@ -1264,8 +1243,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_normal_array]+tostr(dimcount),
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
{ total size = elecount * elesize of the first arraydef }
tcb.emit_tai(Tai_const.Create_sizeint(def.elecount*def.elesize),sizeuinttype);
@ -1296,8 +1274,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_dyn_array],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
{ size of elements }
tcb.emit_tai(Tai_const.Create_sizeint(def.elesize),sizeuinttype);
@ -1322,8 +1299,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_ref],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
write_rtti_reference(tcb,def.pointeddef,rt);
tcb.end_anonymous_record;
@ -1335,8 +1311,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_ref],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
write_rtti_reference(tcb,def.pointeddef,rt);
tcb.end_anonymous_record;
@ -1360,8 +1335,7 @@ implementation
tcb.begin_anonymous_record(
rttilab.Name,
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign
targetinfos[target_info.system]^.alignment.recordalignmin
);
{ use "succ" to omit first enum item "mop_none" }
@ -1394,8 +1368,7 @@ implementation
only be aligned to 4 even on 64 bit target (while the rtti code
in typinfo expects alignments to sizeof(pointer)) }
tcb.begin_anonymous_record('',defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
@ -1451,8 +1424,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_proc_param]+tostr(length(parasym.realname)),
defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ write flags for current parameter }
write_param_flag(tcb,parasym);
{ write param type }
@ -1476,8 +1448,7 @@ implementation
{ write method id and name }
write_header(tcb,def,tkMethod);
tcb.begin_anonymous_record('',defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
@ -1520,8 +1491,7 @@ implementation
begin
write_header(tcb,def,tkProcvar);
tcb.begin_anonymous_record('',defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
@ -1632,8 +1602,7 @@ implementation
collect_propnamelist(propnamelist,def);
tcb.begin_anonymous_record('',defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ write parent typeinfo }
write_rtti_reference(tcb,def.childof,fullrtti);
@ -1659,8 +1628,7 @@ implementation
tcb.emit_shortstring_const(current_module.realmodulename^);
tcb.begin_anonymous_record('',defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ write iidstr }
if def.objecttype=odt_interfacecorba then
@ -1704,8 +1672,7 @@ implementation
tcb.emit_shortstring_const(def.objrealname^);
tcb.begin_anonymous_record('',defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
write_common_rtti_data(tcb,def,rt);
@ -1798,8 +1765,7 @@ implementation
argtcb:=ctai_typedconstbuilder.create([tcalo_is_lab,tcalo_make_dead_strippable,tcalo_apply_constalign]);
argtcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
arglen:=0;
for i:=0 to High(attr.paras) do
@ -1860,14 +1826,12 @@ implementation
tbltcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_attr_list]+tostr(count),
defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tbltcb.emit_ord_const(count,u16inttype);
for i:=0 to count-1 do
begin
tbltcb.begin_anonymous_record(internaltypeprefixName[itp_rtti_attr_entry],defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
attr:=trtti_attribute(attr_list.rtti_attributes[i]);
write_rtti_reference(tbltcb,ttypesym(attr.typesym).typedef,fullrtti);
@ -1979,14 +1943,12 @@ implementation
tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_data_force_indirect]);
{ use TConstPtrUInt packrecords to ensure good alignment }
tcb.begin_anonymous_record('',defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ now emit the data: first the mode }
tcb.emit_tai(Tai_const.create_32bit(longint(mode)),u32inttype);
{ align }
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
if mode=lookup then
begin
o:=tenumsym(syms[0]).value; {Start with min value.}
@ -2013,8 +1975,7 @@ implementation
begin
tcb.emit_ord_const(sym_count,u32inttype);
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
for i:=0 to sym_count-1 do
begin
tcb.emit_ord_const(tenumsym(syms[i]).value,s32inttype);
@ -2058,13 +2019,11 @@ implementation
tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_data_force_indirect]);
{ begin of Tstring_to_ord }
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tcb.emit_ord_const(syms.count,s32inttype);
{ begin of "data" array in Tstring_to_ord }
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
for i:=0 to syms.count-1 do
begin
tcb.emit_ord_const(tenumsym(syms[i]).value,s32inttype);
@ -2249,8 +2208,7 @@ implementation
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rttidef]+tstoreddef(def).rtti_mangledname(rt),
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign
targetinfos[target_info.system]^.alignment.recordalignmin
);
write_rtti_data(tcb,def,rt);
rttidef:=tcb.end_anonymous_record;

View File

@ -614,8 +614,7 @@ implementation
tcb.start_internal_data_builder(current_asmdata.AsmLists[al_const],sec_rodata,_class.vmt_mangledname,datatcb,classtable);
datatcb.begin_anonymous_record('$fpc_intern_classtable_'+tostr(classtablelist.Count-1),
packrecords,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
datatcb.emit_tai(Tai_const.Create_16bit(classtablelist.count),u16inttype);
for i:=0 to classtablelist.Count-1 do
begin
@ -649,8 +648,7 @@ implementation
plus there would be very little chance that it could actually be
reused }
datatcb.begin_anonymous_record('',packrecords,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
datatcb.emit_tai(Tai_const.Create_16bit(fieldcount),u16inttype);
datatcb.emit_tai(Tai_const.Create_sym(classtable),cpointerdef.getreusable(classtabledef));
for i:=0 to _class.symtable.SymList.Count-1 do
@ -672,8 +670,7 @@ implementation
end;
}
datatcb.begin_anonymous_record('$fpc_intern_fieldinfo_'+tostr(length(tfieldvarsym(sym).realname)),packrecords,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
datatcb.emit_tai(Tai_const.Create_sizeint(tfieldvarsym(sym).fieldoffset),sizeuinttype);
classindex:=classtablelist.IndexOf(tfieldvarsym(sym).vardef);
if classindex=-1 then
@ -728,8 +725,7 @@ implementation
begin
tcb.start_internal_data_builder(current_asmdata.AsmLists[al_const],sec_rodata,'',datatcb,fintfvtablelabels[intfindex]);
datatcb.begin_anonymous_record('',0,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
if assigned(AImplIntf.procdefs) then
begin
for i:=0 to AImplIntf.procdefs.count-1 do
@ -847,8 +843,7 @@ implementation
tcb.start_internal_data_builder(current_asmdata.AsmLists[al_const],sec_rodata,_class.vmt_mangledname,datatcb,lab);
datatcb.begin_anonymous_record('',default_settings.packrecords,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
datatcb.emit_tai(Tai_const.Create_sizeint(_class.ImplementedInterfaces.count),sizeuinttype);
interfaceentrydef:=search_system_type('TINTERFACEENTRY').typedef;
interfaceentrytypedef:=search_system_type('TINTERFACEENTRYTYPE').typedef;

View File

@ -1082,8 +1082,7 @@ implementation
begin
unitinits:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_new_section]);
unitinits.begin_anonymous_record('',default_settings.packrecords,sizeof(pint),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ tablecount }
unitinits.emit_ord_const(entries.count,aluuinttype);
@ -1167,8 +1166,7 @@ implementation
count:=0;
tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_new_section]);
tcb.begin_anonymous_record('',1,sizeof(pint),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign
targetinfos[target_info.system]^.alignment.recordalignmin
);
placeholder:=tcb.emit_placeholder(u32inttype);
@ -1244,8 +1242,7 @@ implementation
exit;
tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_new_section]);
tabledef:=tcb.begin_anonymous_record('',1,sizeof(pint),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
if assigned(current_module.globalsymtable) then
current_module.globalsymtable.SymList.ForEachCall(@AddToThreadvarList,tcb);
current_module.localsymtable.SymList.ForEachCall(@AddToThreadvarList,tcb);
@ -1279,8 +1276,7 @@ implementation
begin
tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_new_section]);
tcb.begin_anonymous_record('',default_settings.packrecords,sizeof(pint),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign
targetinfos[target_info.system]^.alignment.recordalignmin
);
{ placeholder for the count }
countplaceholder:=tcb.emit_placeholder(sizesinttype);
@ -1334,8 +1330,7 @@ implementation
s:=make_mangledname(prefix,current_module.localsymtable,'');
tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_new_section]);
tcb.begin_anonymous_record('',default_settings.packrecords,sizeof(pint),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign );
targetinfos[target_info.system]^.alignment.recordalignmin);
repeat
{ optimize away unused local/static symbols }
if (item.sym.refs>0) or (item.sym.owner.symtabletype=globalsymtable) then
@ -1399,8 +1394,7 @@ implementation
count:=0;
hp:=tmodule(loaded_units.first);
tcb.begin_anonymous_record('',default_settings.packrecords,sizeof(pint),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
countplaceholder:=tcb.emit_placeholder(sizesinttype);
while assigned(hp) do
begin

View File

@ -833,8 +833,7 @@ implementation
vmtdef:=crecorddef.create_global_internal(
vmtdefname,
0,
target_info.alignment.recordalignmin,
target_info.alignment.maxCrecordalign);
target_info.alignment.recordalignmin);
{$ifdef llvm}
{ in case of a class declared in the implementation section of unit
whose method is called from an inline routine -- LLVM needs to be able

View File

@ -330,8 +330,7 @@ procedure tobjcrttiwriter.gen_objc_methods(list: tasmlist; objccls: tobjectdef;
tcb:=ctai_typedconstbuilder.create(SectFlags[target_info.system in systems_objc_nfabi]);
tcb.begin_anonymous_record(internaltypeprefixName[itp_objc_method_list]+tostr(mcnt),
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
if (abi=oa_fragile) then
{ not used, always zero }
@ -470,8 +469,7 @@ procedure tobjcrttiwriter.gen_objc_protocol_list(list: tasmlist; protolist: tfpo
tcb:=ctai_typedconstbuilder.create([tcalo_is_lab,tcalo_new_section]);
tcb.begin_anonymous_record(internaltypeprefixName[itp_objc_proto_list]+tostr(protolist.Count),
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ protocol lists are stored in .objc_cat_cls_meth section }
current_asmdata.getlabel(protolistsym, alt_data);
@ -526,8 +524,7 @@ begin
tcb.begin_anonymous_record(
internaltypeprefixName[itp_objc_cat_methods]+tostr(items.count),
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
if (abi=oa_nonfragile) then
begin
{ size of each entry -- always 32 bit value }
@ -709,8 +706,7 @@ function tobjcrttiwriter_fragile.gen_objc_protocol_ext(list: TAsmList; optinstsy
tcb.begin_anonymous_record(
internaltypeprefixName[itb_objc_fr_protocol_ext],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ size of this structure }
tcb.emit_ord_const(16,u32inttype);
{ optional instance methods }
@ -757,8 +753,7 @@ procedure tobjcrttiwriter_fragile.gen_objc_protocol(list:TAsmList; protocol: tob
tcb.begin_anonymous_record(
internaltypeprefixName[itb_objc_fr_protocol],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ protocol's isa - points to information about optional methods/properties }
ConcatSymOrNil(tcb,protoext,voidpointertype);
@ -828,8 +823,7 @@ procedure tobjcrttiwriter_fragile.gen_objc_category_sections(list:TAsmList; objc
tcb.begin_anonymous_record(
internaltypeprefixName[itb_objc_fr_category],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tcb.queue_init(voidpointertype);
tcb.queue_emit_asmsym(catstrsym,catstrdef);
@ -945,8 +939,7 @@ procedure tobjcrttiwriter_fragile.gen_objc_classes_sections(list:TAsmList; objcl
tcb:=ctai_typedconstbuilder.create([tcalo_new_section,tcalo_no_dead_strip]);
tcb.begin_anonymous_record(internaltypeprefixName[itb_objc_fr_meta_class],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tcb.queue_init(voidpointertype);
tcb.queue_emit_asmsym(metaisaStrSym,metaisaStrDef);
@ -1001,8 +994,7 @@ procedure tobjcrttiwriter_fragile.gen_objc_classes_sections(list:TAsmList; objcl
tcb:=ctai_typedconstbuilder.create([tcalo_new_section,tcalo_no_dead_strip]);
tcb.begin_anonymous_record(internaltypeprefixName[itb_objc_fr_class],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ for class declaration: the isa points to the meta-class declaration }
tcb.emit_tai(Tai_const.Create_sym(metasym),cpointerdef.getreusable(metaDef));
@ -1070,8 +1062,7 @@ procedure tobjcrttiwriter_fragile.gen_objc_info_sections(list: tasmlist);
tcb:=ctai_typedconstbuilder.create([tcalo_new_section,tcalo_no_dead_strip]);
tcb.begin_anonymous_record('',
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ ??? (always 0 in Clang) }
tcb.emit_tai(tai_const.Create_nil_dataptr,voidpointertype);
{ ??? (From Clang: always 0, pointer to some selector) }
@ -1102,8 +1093,7 @@ procedure tobjcrttiwriter_fragile.gen_objc_info_sections(list: tasmlist);
tcb:=ctai_typedconstbuilder.create([tcalo_new_section,tcalo_no_dead_strip]);
tcb.begin_anonymous_record('',
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ version number = 7 (always, both for gcc and clang) }
tcb.emit_ord_const(7,ptruinttype);
{ sizeof(objc_module): 4 pointer-size entities }
@ -1267,8 +1257,7 @@ procedure tobjcrttiwriter_nonfragile.gen_objc_ivars(list: tasmlist; objccls: tob
tcb.begin_anonymous_record(
internaltypeprefixName[itb_objc_nf_ivars]+tostr(vcnt),
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
{ size of each entry -- always 32 bit value }
ivtype:=search_named_unit_globaltype('OBJC','OBJC_IVAR',true).typedef;
@ -1436,8 +1425,7 @@ procedure tobjcrttiwriter_nonfragile.gen_objc_category_sections(list:TAsmList; o
tcb:=ctai_typedconstbuilder.create([tcalo_new_section]);
tcb.begin_anonymous_record(internaltypeprefixName[itb_objc_nf_category],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tcb.queue_init(voidpointertype);
tcb.queue_emit_asmsym(catstrsym,catstrdef);
tcb.emit_tai(Tai_const.Create_sym(clssym),voidpointertype);
@ -1642,8 +1630,7 @@ procedure tobjcrttiwriter_nonfragile.gen_objc_class_ro_part(list: tasmlist; objc
tcb.begin_anonymous_record(
internaltypeprefixName[itb_objc_nf_class_ro_part],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
tcb.emit_ord_const(flags,u32inttype);
tcb.emit_ord_const(start,u32inttype);
@ -1717,15 +1704,13 @@ procedure tobjcrttiwriter_nonfragile.gen_objc_classes_sections(list:TAsmList; ob
classdef:=isatcb.begin_anonymous_record(
internaltypeprefixName[itb_objc_nf_class],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
metatcb:=ctai_typedconstbuilder.create([tcalo_new_section]);
metadef:=metatcb.begin_anonymous_record(
internaltypeprefixName[itb_objc_nf_meta_class],
C_alignment,1,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
clssym:=current_asmdata.DefineAsmSymbol(objclss.rtti_mangledname(objcclassrtti),vis,AT_DATA,classdef);
metasym:=current_asmdata.DefineAsmSymbol(objclss.rtti_mangledname(objcmetartti),vis,AT_DATA,metadef);

View File

@ -1900,7 +1900,7 @@ implementation
Message(type_e_ordinal_expr_expected);
consume(_OF);
UnionSymtable:=trecordsymtable.create('',current_settings.packrecords,current_settings.alignment.recordalignmin,current_settings.alignment.maxCrecordalign);
UnionSymtable:=trecordsymtable.create('',current_settings.packrecords,current_settings.alignment.recordalignmin);
UnionDef:=crecorddef.create('',unionsymtable);
uniondef.isunion:=true;

View File

@ -1266,7 +1266,7 @@ uses
Message(parser_e_illegal_expression)
else
begin
srsymtable:=trecordsymtable.create(defname,0,1,1);
srsymtable:=trecordsymtable.create(defname,0,1);
basedef:=crecorddef.create(defname,srsymtable);
include(constraintdata.flags,gcf_record);
allowconstructor:=false;

View File

@ -1088,7 +1088,7 @@ implementation
accessed from within nested routines (start with extra dollar to prevent
the JVM from thinking this is a nested class in the unit) }
nestedvarsst:=trecordsymtable.create('$'+current_module.realmodulename^+'$$_fpc_nestedvars$'+pd.unique_id_str,
current_settings.alignment.localalignmax,current_settings.alignment.localalignmin,current_settings.alignment.maxCrecordalign);
current_settings.alignment.localalignmax,current_settings.alignment.localalignmin);
nestedvarsdef:=crecorddef.create(nestedvarsst.name^,nestedvarsst);
{$ifdef jvm}
maybe_guarantee_record_typesym(nestedvarsdef,nestedvarsdef.owner);

View File

@ -583,7 +583,7 @@ implementation
if not(target_info.system in systems_managed_vm) then
begin
{ Add a type for virtual method tables }
hrecst:=trecordsymtable.create('',current_settings.packrecords,current_settings.alignment.recordalignmin,current_settings.alignment.maxCrecordalign);
hrecst:=trecordsymtable.create('',current_settings.packrecords,current_settings.alignment.recordalignmin);
vmttype:=crecorddef.create('',hrecst);
pvmttype:=cpointerdef.create(vmttype);
{ can't use addtype for pvmt because the rtti of the pointed
@ -608,13 +608,13 @@ implementation
addtype('$vtblarray',vmtarraytype);
end;
{ Add a type for methodpointers }
hrecst:=trecordsymtable.create('',1,current_settings.alignment.recordalignmin,current_settings.alignment.maxCrecordalign);
hrecst:=trecordsymtable.create('',1,current_settings.alignment.recordalignmin);
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);
hrecst:=trecordsymtable.create('',1,current_settings.alignment.recordalignmin);
addfield(hrecst,cfieldvarsym.create('$proc',vs_value,voidcodepointertype,[],true));
addfield(hrecst,cfieldvarsym.create('$parentfp',vs_value,parentfpvoidpointertype,[],true));
nestedprocpointertype:=crecorddef.create('',hrecst);

View File

@ -988,7 +988,7 @@ implementation
if (n<>'') or
not(target_info.system in systems_jvm) then
begin
recst:=trecordsymtable.create(n,current_settings.packrecords,current_settings.alignment.recordalignmin,current_settings.alignment.maxCrecordalign);
recst:=trecordsymtable.create(n,current_settings.packrecords,current_settings.alignment.recordalignmin);
{ can't use recst.realname^ instead of n, because recst.realname is
nil in case of an empty name }
current_structdef:=crecorddef.create(n,recst);
@ -998,7 +998,7 @@ implementation
{ for the JVM target records always need a name, because they are
represented by a class }
recst:=trecordsymtable.create(current_module.realmodulename^+'__fpc_intern_recname_'+tostr(current_module.deflist.count),
current_settings.packrecords,current_settings.alignment.recordalignmin,current_settings.alignment.maxCrecordalign);
current_settings.packrecords,current_settings.alignment.recordalignmin);
current_structdef:=crecorddef.create(recst.name^,recst);
end;
result:=current_structdef;

View File

@ -374,7 +374,7 @@ interface
variantrecdesc : pvariantrecdesc;
isunion : boolean;
constructor create(const n:string; p:TSymtable);virtual;
constructor create_global_internal(n: string; packrecords, recordalignmin, maxCrecordalign: shortint); virtual;
constructor create_global_internal(n: string; packrecords, recordalignmin: shortint); virtual;
function add_field_by_def(const optionalname: TIDString; def: tdef): tsym;
procedure add_fields_from_deflist(fieldtypes: tfplist);
constructor ppuload(ppufile:tcompilerppufile);
@ -1387,8 +1387,7 @@ implementation
{ set recordalinmin to sizeof(pint), so the second field gets put at
offset = sizeof(pint) as expected }
result:=crecorddef.create_global_internal(
name,sizeof(pint),sizeof(pint),
init_settings.alignment.maxCrecordalign);
name,sizeof(pint),sizeof(pint));
{$ifdef cpu16bitaddr}
index_field:=result.add_field_by_def('',u16inttype);
{$else cpu16bitaddr}
@ -1424,8 +1423,7 @@ implementation
for i:=low(fields) to high(fields) do
fieldlist.add(fields[i]);
result:=crecorddef.create_global_internal(internaltypeprefixName[prefix],packrecords,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
result.add_fields_from_deflist(fieldlist);
fieldlist.free;
end;
@ -1456,8 +1454,7 @@ implementation
exit;
end;
recdef:=crecorddef.create_global_internal(name,packrecords,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
targetinfos[target_info.system]^.alignment.recordalignmin);
fields:=tfplist.create;
fields.add(countdef);
if count>0 then
@ -4783,7 +4780,7 @@ implementation
end;
constructor trecorddef.create_global_internal(n: string; packrecords, recordalignmin, maxCrecordalign: shortint);
constructor trecorddef.create_global_internal(n: string; packrecords, recordalignmin: shortint);
var
oldsymtablestack: tsymtablestack;
ts: ttypesym;
@ -4798,7 +4795,7 @@ implementation
that can have side-effects (e.g., it removes helpers) }
symtablestack:=nil;
symtable:=trecordsymtable.create(n,packrecords,recordalignmin,maxCrecordalign);
symtable:=trecordsymtable.create(n,packrecords,recordalignmin);
symtable.defowner:=self;
isunion:=false;
inherited create(n,recorddef,true);
@ -4892,7 +4889,7 @@ implementation
end
else
begin
symtable:=trecordsymtable.create(objrealname^,0,0,0);
symtable:=trecordsymtable.create(objrealname^,0,0);
trecordsymtable(symtable).fieldalignment:=shortint(ppufile.getbyte);
trecordsymtable(symtable).recordalignment:=shortint(ppufile.getbyte);
trecordsymtable(symtable).padalignment:=shortint(ppufile.getbyte);
@ -7082,7 +7079,7 @@ implementation
if objecttype=odt_helper then
owner.includeoption(sto_has_helper);
symtable:=tObjectSymtable.create(self,n,current_settings.packrecords,
current_settings.alignment.recordalignmin,current_settings.alignment.maxCrecordalign);
current_settings.alignment.recordalignmin);
{ create space for vmt !! }
vmtentries:=TFPList.Create;
set_parent(c);
@ -7112,7 +7109,7 @@ implementation
{ only used for external Objective-C classes/protocols }
if (objextname^='') then
stringdispose(objextname);
symtable:=tObjectSymtable.create(self,objrealname^,0,0,0);
symtable:=tObjectSymtable.create(self,objrealname^,0,0);
tObjectSymtable(symtable).datasize:=ppufile.getasizeint;
tObjectSymtable(symtable).paddingsize:=ppufile.getword;
tObjectSymtable(symtable).fieldalignment:=shortint(ppufile.getbyte);

View File

@ -108,10 +108,9 @@ interface
recordalignment, { alignment desired when inserting this record }
fieldalignment, { alignment current alignment used when fields are inserted }
padalignment : shortint; { size to a multiple of which the symtable has to be rounded up }
recordalignmin, { local equivalents of global settings, so that records can }
maxCrecordalign: shortint; { be created with custom settings internally }
recordalignmin: shortint; { local equivalentsof global settings, so that records can be created with custom settings internally }
has_fields_with_mop : tmanagementoperators; { whether any of the fields has the need for a management operator (or one of the field's fields) }
constructor create(const n:string;usealign,recordminalign,recordmaxCalign:shortint);
constructor create(const n:string;usealign,recordminalign:shortint);
destructor destroy;override;
procedure ppuload(ppufile:tcompilerppufile);override;
procedure ppuwrite(ppufile:tcompilerppufile);override;
@ -161,14 +160,14 @@ interface
{ object/classes. In XE5 and newer is possible to use class operator }
{ for classes (like for Delphi .NET before) only for Delphi NEXTGEN }
managementoperators : tmanagementoperators;
constructor create(const n:string;usealign,recordminalign,recordmaxCalign:shortint);
constructor create(const n:string;usealign,recordminalign:shortint);
procedure insertunionst(unionst : trecordsymtable;offset : asizeint);
procedure includemanagementoperator(mop:tmanagementoperator);
end;
tObjectSymtable = class(tabstractrecordsymtable)
public
constructor create(adefowner:tdef;const n:string;usealign,recordminalign,recordmaxCalign:shortint);
constructor create(adefowner:tdef;const n:string;usealign,recordminalign:shortint);
function checkduplicate(var hashedid:THashedIDString;sym:TSymEntry):boolean;override;
end;
@ -1170,7 +1169,7 @@ implementation
end;
{$endif llvm}
constructor tabstractrecordsymtable.create(const n:string;usealign,recordminalign,recordmaxCalign:shortint);
constructor tabstractrecordsymtable.create(const n:string;usealign,recordminalign:shortint);
begin
inherited create(n);
_datasize:=0;
@ -1178,7 +1177,6 @@ implementation
recordalignment:=1;
usefieldalignment:=usealign;
recordalignmin:=recordminalign;
maxCrecordalign:=recordmaxCalign;
padalignment:=1;
{ recordalign C_alignment means C record packing, that starts
with an alignment of 1 }
@ -1310,7 +1308,7 @@ implementation
begin
case usefieldalignment of
C_alignment:
varalignrecord:=used_align(varalign,recordalignmin,maxCrecordalign);
varalignrecord:=used_align(varalign,recordalignmin,current_settings.alignment.maxCrecordalign);
mac68k_alignment:
varalignrecord:=2;
else
@ -1788,7 +1786,7 @@ implementation
Message1(sym_w_wrong_C_pack,vardef.typename);
if varalign=0 then
varalign:=l;
if (globalfieldalignment<maxCrecordalign) then
if (globalfieldalignment<current_settings.alignment.maxCrecordalign) then
begin
if (varalign>16) and (globalfieldalignment<32) then
globalfieldalignment:=32
@ -1804,7 +1802,7 @@ implementation
else if (varalign>1) and (globalfieldalignment<2) then
globalfieldalignment:=2;
end;
globalfieldalignment:=min(globalfieldalignment,maxCrecordalign);
globalfieldalignment:=min(globalfieldalignment,current_settings.alignment.maxCrecordalign);
end;
mac68k_alignment:
begin
@ -1836,9 +1834,9 @@ implementation
TRecordSymtable
****************************************************************************}
constructor trecordsymtable.create(const n:string;usealign,recordminalign,recordmaxCalign:shortint);
constructor trecordsymtable.create(const n:string;usealign,recordminalign:shortint);
begin
inherited create(n,usealign,recordminalign,recordmaxCalign);
inherited create(n,usealign,recordminalign);
symtabletype:=recordsymtable;
end;
@ -1963,9 +1961,9 @@ implementation
TObjectSymtable
****************************************************************************}
constructor tObjectSymtable.create(adefowner:tdef;const n:string;usealign,recordminalign,recordmaxCalign:shortint);
constructor tObjectSymtable.create(adefowner:tdef;const n:string;usealign,recordminalign:shortint);
begin
inherited create(n,usealign,recordminalign,recordmaxCalign);
inherited create(n,usealign,recordminalign);
symtabletype:=ObjectSymtable;
defowner:=adefowner;
end;