fcl-passrc: useanalyzer: skip not used record methods for typeinfo

This commit is contained in:
mattias 2022-02-10 22:27:01 +01:00
parent 30e24e48c2
commit a8d19553b9

View File

@ -1214,6 +1214,7 @@ var
ClassEl: TPasClassType;
ArrType: TPasArrayType;
SpecType: TPasSpecializeType;
Rec: TPasRecordType;
begin
{$IFDEF VerbosePasAnalyzer}
writeln('TPasAnalyzer.UsePublished START ',GetObjName(El));
@ -1285,8 +1286,9 @@ begin
else if C=TPasRecordType then
begin
// published record: use all members (except generic)
if CanSkipGenericType(TPasRecordType(El)) then exit;
Members:=TPasRecordType(El).Members;
Rec:=TPasRecordType(El);
if CanSkipGenericType(Rec) then exit;
Members:=Rec.Members;
for i:=0 to Members.Count-1 do
begin
Member:=TPasElement(Members[i]);
@ -1294,9 +1296,17 @@ begin
continue; // attributes are never used directly
if IsGenericElement(Member) then
continue;
// all elements, even if not used
UseSubEl(Member);
if Member.ClassType=TPasVariable then
// all fields, even if not used
UseSubEl(Member)
else if IsUsed(Member) then
// all used non fields
UseSubEl(Member);
end;
UseSubEl(Rec.VariantEl);
if Rec.Variants<>nil then
for i:=0 to Rec.Variants.Count-1 do
UseSubEl(TPasVariant(Rec.Variants[i]));
end
else if C.InheritsFrom(TPasProcedure) then
UseSubEl(TPasProcedure(El).ProcType)