|
@@ -110,6 +110,7 @@ interface
|
|
function alignment:shortint;override;
|
|
function alignment:shortint;override;
|
|
function is_publishable : boolean;override;
|
|
function is_publishable : boolean;override;
|
|
function needs_inittable : boolean;override;
|
|
function needs_inittable : boolean;override;
|
|
|
|
+ function has_non_trivial_init_child(check_parent:boolean):boolean;override;
|
|
function rtti_mangledname(rt:trttitype):TSymStr;override;
|
|
function rtti_mangledname(rt:trttitype):TSymStr;override;
|
|
function OwnerHierarchyName: string; override;
|
|
function OwnerHierarchyName: string; override;
|
|
function fullownerhierarchyname(skipprocparams:boolean):TSymStr;override;
|
|
function fullownerhierarchyname(skipprocparams:boolean):TSymStr;override;
|
|
@@ -346,6 +347,7 @@ interface
|
|
{ debug }
|
|
{ debug }
|
|
function needs_inittable : boolean;override;
|
|
function needs_inittable : boolean;override;
|
|
function needs_separate_initrtti:boolean;override;
|
|
function needs_separate_initrtti:boolean;override;
|
|
|
|
+ function has_non_trivial_init_child(check_parent:boolean):boolean;override;
|
|
end;
|
|
end;
|
|
trecorddefclass = class of trecorddef;
|
|
trecorddefclass = class of trecorddef;
|
|
|
|
|
|
@@ -458,6 +460,7 @@ interface
|
|
function is_publishable : boolean;override;
|
|
function is_publishable : boolean;override;
|
|
function needs_inittable : boolean;override;
|
|
function needs_inittable : boolean;override;
|
|
function needs_separate_initrtti : boolean;override;
|
|
function needs_separate_initrtti : boolean;override;
|
|
|
|
+ function has_non_trivial_init_child(check_parent:boolean):boolean;override;
|
|
function rtti_mangledname(rt:trttitype):TSymStr;override;
|
|
function rtti_mangledname(rt:trttitype):TSymStr;override;
|
|
function vmt_mangledname : TSymStr;
|
|
function vmt_mangledname : TSymStr;
|
|
function vmt_def: trecorddef;
|
|
function vmt_def: trecorddef;
|
|
@@ -2102,6 +2105,12 @@ implementation
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
+ function tstoreddef.has_non_trivial_init_child(check_parent:boolean):boolean;
|
|
|
|
+ begin
|
|
|
|
+ result:=false;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+
|
|
function tstoreddef.is_intregable : boolean;
|
|
function tstoreddef.is_intregable : boolean;
|
|
var
|
|
var
|
|
recsize,temp: longint;
|
|
recsize,temp: longint;
|
|
@@ -4546,6 +4555,12 @@ implementation
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
+ function trecorddef.has_non_trivial_init_child(check_parent:boolean):boolean;
|
|
|
|
+ begin
|
|
|
|
+ result:=trecordsymtable(symtable).has_non_trivial_init;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+
|
|
procedure trecorddef.buildderef;
|
|
procedure trecorddef.buildderef;
|
|
begin
|
|
begin
|
|
inherited buildderef;
|
|
inherited buildderef;
|
|
@@ -7248,6 +7263,19 @@ implementation
|
|
result:=not (objecttype in [odt_interfacecom,odt_interfacecorba,odt_dispinterface]);
|
|
result:=not (objecttype in [odt_interfacecom,odt_interfacecorba,odt_dispinterface]);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+
|
|
|
|
+ function tobjectdef.has_non_trivial_init_child(check_parent:boolean):boolean;
|
|
|
|
+ begin
|
|
|
|
+ if objecttype in [odt_class,odt_object] then
|
|
|
|
+ begin
|
|
|
|
+ result:=tobjectsymtable(symtable).has_non_trivial_init or
|
|
|
|
+ (check_parent and assigned(childof) and childof.has_non_trivial_init_child(true));
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ result:=false;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+
|
|
function tobjectdef.rtti_mangledname(rt: trttitype): TSymStr;
|
|
function tobjectdef.rtti_mangledname(rt: trttitype): TSymStr;
|
|
begin
|
|
begin
|
|
if not(objecttype in [odt_objcclass,odt_objcprotocol]) then
|
|
if not(objecttype in [odt_objcclass,odt_objcprotocol]) then
|