Added TRttiIndexedProperty, the whole property handling infrastructure has been significantly redesigned

This commit is contained in:
Lipinast Lekrisov 2024-11-03 18:07:45 +00:00
parent 2596af84fa
commit f7bcabd956
2 changed files with 645 additions and 156 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2066,7 +2066,7 @@ begin
begin begin
// When passing nil, we just need the count // When passing nil, we just need the count
if Assigned(PropList) then if Assigned(PropList) then
PropList^[Result]:=TD^.Prop[i]; PropList^[Result]:=TP;
Inc(Result); Inc(Result);
end; end;
end; end;
@ -2082,7 +2082,7 @@ Function GetRecordPropInfosEx(TypeInfo: PTypeInfo; PropList: PPropListEx; Visibi
Var Var
TD : PPropDataEx; TD : PPropDataEx;
TP : PPropListEx; TP : PPropInfoEx;
Offset,I,Count : Longint; Offset,I,Count : Longint;
begin begin
@ -2090,17 +2090,17 @@ begin
// Clear list // Clear list
TD:=PRecordData(GetTypeData(TypeInfo))^.ExRTTITable; TD:=PRecordData(GetTypeData(TypeInfo))^.ExRTTITable;
Count:=TD^.PropCount; Count:=TD^.PropCount;
// Now point TP to first propinfo record.
Inc(Pointer(TP),SizeOF(Word));
tp:=aligntoptr(tp);
For I:=0 to Count-1 do For I:=0 to Count-1 do
if ([]=Visibilities) or (PropList^[Result]^.Visibility in Visibilities) then begin
TP:=TD^.Prop[I];
if ([]=Visibilities) or (TP^.Visibility in Visibilities) then
begin begin
// When passing nil, we just need the count // When passing nil, we just need the count
if Assigned(PropList) then if Assigned(PropList) then
PropList^[Result]:=TD^.Prop[i]; PropList^[Result]:=TP;
Inc(Result); Inc(Result);
end; end;
end;
end; end;
@ -5148,4 +5148,4 @@ begin
end; end;
{$ENDIF HAVE_INVOKEHELPER} {$ENDIF HAVE_INVOKEHELPER}
end. end.