* Allow %o, let %p handle object pointers and class pointers. Fixes issue #40762

This commit is contained in:
Michaël Van Canneyt 2024-10-09 09:10:51 +02:00
parent 23bbf87c10
commit a2deb9cbf1

View File

@ -371,9 +371,34 @@ begin
SetLength(hs,Prec);
ToAdd:=hs;
end;
'P' : Begin
CheckArg(vtpointer,true);
ToAdd:=TFormatString(HexStr(ptruint(Args[DoArg].VPointer),sizeof(Ptruint)*2));
'O' :
begin
if CheckArg(vtClass,false) then
begin
if (Args[DoArg].VClass=Nil) then
ToAdd:='<Nil>'
else
ToAdd:=TFormatString(Args[DoArg].VClass.ClassName);
end
else
begin
CheckArg(vtObject,True);
if (Args[DoArg].VObject=Nil) then
ToAdd:='<Nil>'
else
ToAdd:=TFormatString(Args[DoArg].VObject.ToString);
end
end;
'P' : begin
if CheckArg(vtObject,false) then
ToAdd:=TFormatString(HexStr(ptruint(Args[DoArg].VObject),sizeof(Ptruint)*2))
else if CheckArg(vtClass,false) then
ToAdd:=TFormatString(HexStr(ptruint(Args[DoArg].VClass),sizeof(Ptruint)*2))
else
begin
CheckArg(vtpointer,true);
ToAdd:=TFormatString(HexStr(ptruint(Args[DoArg].VPointer),sizeof(Ptruint)*2));
end;
// Insert ':'. Is this needed in 32 bit ? No it isn't.
// Insert(':',ToAdd,5);
end;