Browse Source

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

Michaël Van Canneyt 10 months ago
parent
commit
a2deb9cbf1
1 changed files with 28 additions and 3 deletions
  1. 28 3
      rtl/objpas/sysutils/sysformt.inc

+ 28 - 3
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:='<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;