+ add method get_dynarray_symofs to retrieve the platform specific offset of the dynamic array data from its

meta data record

git-svn-id: trunk@39039 -
This commit is contained in:
svenbarth 2018-05-20 11:50:11 +00:00
parent d3d9221c8d
commit e863245021

View File

@ -444,6 +444,12 @@ type
supported this is equal to the header size } supported this is equal to the header size }
class function get_string_symofs(typ: tstringtype; winlikewidestring: boolean): pint; virtual; class function get_string_symofs(typ: tstringtype; winlikewidestring: boolean): pint; virtual;
{ returns the offset of the array data relatve to dynamic array constant
labels. On most platforms, this is 0 (with the header at a negative
offset), but on some platforms such negative offsets are not supported
and thus this is equal to the header size }
class function get_dynarray_symofs:pint;virtual;
{ set the fieldvarsym whose data we will emit next; needed { set the fieldvarsym whose data we will emit next; needed
in case of variant records, so we know which part of the variant gets in case of variant records, so we know which part of the variant gets
initialised. Also in case of objects, because the fieldvarsyms are spread initialised. Also in case of objects, because the fieldvarsyms are spread
@ -1118,6 +1124,16 @@ implementation
end; end;
class function ttai_typedconstbuilder.get_dynarray_symofs:pint;
begin
{ darwin's linker does not support negative offsets }
if not (target_info.system in systems_darwin) then
result:=0
else
result:=get_dynarray_header_size;
end;
class function ttai_typedconstbuilder.get_string_header_size(typ: tstringtype; winlikewidestring: boolean): pint; class function ttai_typedconstbuilder.get_string_header_size(typ: tstringtype; winlikewidestring: boolean): pint;
var var
ansistring_header_size: pint; ansistring_header_size: pint;