mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 05:49:20 +02:00
+ add method has_non_trivial_init_child() to tdef which provides access to the symtable's
sto_has_non_trivial_init flag git-svn-id: trunk@39253 -
This commit is contained in:
parent
cc153176f3
commit
61bde67082
@ -110,6 +110,7 @@ interface
|
||||
function alignment:shortint;override;
|
||||
function is_publishable : 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 OwnerHierarchyName: string; override;
|
||||
function fullownerhierarchyname(skipprocparams:boolean):TSymStr;override;
|
||||
@ -346,6 +347,7 @@ interface
|
||||
{ debug }
|
||||
function needs_inittable : boolean;override;
|
||||
function needs_separate_initrtti:boolean;override;
|
||||
function has_non_trivial_init_child(check_parent:boolean):boolean;override;
|
||||
end;
|
||||
trecorddefclass = class of trecorddef;
|
||||
|
||||
@ -458,6 +460,7 @@ interface
|
||||
function is_publishable : boolean;override;
|
||||
function needs_inittable : 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 vmt_mangledname : TSymStr;
|
||||
function vmt_def: trecorddef;
|
||||
@ -2102,6 +2105,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function tstoreddef.has_non_trivial_init_child(check_parent:boolean):boolean;
|
||||
begin
|
||||
result:=false;
|
||||
end;
|
||||
|
||||
|
||||
function tstoreddef.is_intregable : boolean;
|
||||
var
|
||||
recsize,temp: longint;
|
||||
@ -4546,6 +4555,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function trecorddef.has_non_trivial_init_child(check_parent:boolean):boolean;
|
||||
begin
|
||||
result:=trecordsymtable(symtable).has_non_trivial_init;
|
||||
end;
|
||||
|
||||
|
||||
procedure trecorddef.buildderef;
|
||||
begin
|
||||
inherited buildderef;
|
||||
@ -7248,6 +7263,19 @@ implementation
|
||||
result:=not (objecttype in [odt_interfacecom,odt_interfacecorba,odt_dispinterface]);
|
||||
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;
|
||||
begin
|
||||
if not(objecttype in [odt_objcclass,odt_objcprotocol]) then
|
||||
|
@ -88,6 +88,8 @@ interface
|
||||
function getsymtable(t:tgetsymtable):TSymtable;virtual;
|
||||
function is_publishable:boolean;virtual;abstract;
|
||||
function needs_inittable:boolean;virtual;abstract;
|
||||
{ contains a (managed) child that is not initialized to 0/Nil }
|
||||
function has_non_trivial_init_child(check_parent:boolean):boolean;virtual;abstract;
|
||||
function needs_separate_initrtti:boolean;virtual;abstract;
|
||||
procedure ChangeOwner(st:TSymtable);
|
||||
function getreusablesymtab: tsymtable;
|
||||
|
Loading…
Reference in New Issue
Block a user