* change RecInitTable into a direct reference to avoid an unnecessary indirection as both the full and init RTTI of a record always reside inside the same unit

git-svn-id: trunk@35128 -
This commit is contained in:
svenbarth 2016-12-14 18:40:16 +00:00
parent e580e22576
commit 7089677a22
3 changed files with 6 additions and 4 deletions

View File

@ -863,7 +863,9 @@ implementation
begin
{ point to more optimal init table }
include(def.defstates,ds_init_table_used);
write_rtti_reference(tcb,def,initrtti);
{ we use a direct reference as the init RTTI is always in the same
unit as the full RTTI }
tcb.emit_tai(Tai_const.Create_sym(ref_rtti(def,initrtti,false)),voidpointertype);
end;
tcb.emit_ord_const(def.size,u32inttype);

View File

@ -49,7 +49,7 @@ type
{$endif USE_PACKED}
record
{$ifndef VER3_0}
InitTable: PPointer;
InitTable: Pointer;
{$endif VER3_0}
Size: Longint;
Count: Longint;
@ -116,7 +116,7 @@ begin
{ check terminator, maybe we are already in init table }
if Assigned(PRecordInfoInit(typeInfo)^.Terminator) then
{ point to more optimal initrtti }
result:=PRecordInfoFull(result)^.InitTable^;
result:=PRecordInfoFull(result)^.InitTable;
{$endif VER3_0}
end;

View File

@ -270,7 +270,7 @@ unit typinfo;
tkRecord:
(
{$ifndef VER3_0}
RecInitTable: PPointer;
RecInitTable: Pointer; { points to TTypeInfo followed by init table }
{$endif VER3_0}
RecSize: Integer;
ManagedFldCount: Integer;