From a2deb9cbf119b89ef0a713519cef36882f3565ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Wed, 9 Oct 2024 09:10:51 +0200 Subject: [PATCH] * Allow %o, let %p handle object pointers and class pointers. Fixes issue #40762 --- rtl/objpas/sysutils/sysformt.inc | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/rtl/objpas/sysutils/sysformt.inc b/rtl/objpas/sysutils/sysformt.inc index 96bd75652c..6a103ae777 100644 --- a/rtl/objpas/sysutils/sysformt.inc +++ b/rtl/objpas/sysutils/sysformt.inc @@ -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:='' + else + ToAdd:=TFormatString(Args[DoArg].VClass.ClassName); + end + else + begin + CheckArg(vtObject,True); + if (Args[DoArg].VObject=Nil) then + ToAdd:='' + 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;