[fpc-devel] restbase.pp LoadFromJSON calling StopRecordPropertyChanges;
Wayne Sherman
wsherman at gmail.com
Sat Jan 14 21:39:14 CET 2023
On Sat, Jan 14, 2023 at 10:34 AM Michael Van Canneyt wrote:
> On Sat, 14 Jan 2023, Wayne Sherman wrote:
> > 3) Why does MarkPropertyChanged offset the index and
> > IsPropertyModified does not take the offset into account?
>
> They should be the same. I don't remember why I created the two methods
> differently.
For property index specifiers, it seems that NameIndex might be the
wrong index used in IsPropertyModified:
function TBaseObject.IsPropertyModified(Info: PPropInfo): Boolean;
begin
Result:=Not Assigned(FBits) or FBits.Bits[Info^.NameIndex]
end;
and possibly the rtl docs are incorrect(?):
https://www.freepascal.org/docs-html/rtl/typinfo/tpropinfo.html
Index - Index for array properties
NameIndex - Index for indexed properties << IS THIS CORRECT?
In the typinfo.pp unit, a comment indicates that NameIndex has to do
with property names (i.e. not the index specifier)
https://gitlab.com/freepascal.org/fpc/source/-/blob/main/rtl/objpas/typinfo.pp#L1689
// Don't overwrite properties with the same name
if PropList^[TP^.NameIndex]=nil then
PropList^[TP^.NameIndex]:=TP;
// Point to TP next propinfo record.
// Located at Name[Length(Name)+1] !
TP:=aligntoptr(PPropInfo(pointer(@TP^.Name)+PByte(@TP^.Name)^+1));
Dec(Count);
end;
NameIndex in Delphi typeinfo also has to do with Names of properties
and Index has the information on indexed properties:
https://docwiki.embarcadero.com/Libraries/Sydney/en/System.TypInfo.TPropInfo
Index - The index of the property. It is used as a parameter to the
GetProc and SetProc methods on indexed properties.
NameIndex - The offset into the Name field where the property's name starts.
More information about the fpc-devel
mailing list