Przeglądaj źródła

+ Exception.GetBaseException

(cherry picked from commit 18e0979379b2976328a714a7d0e517a5f45aefc0)
florian 3 lat temu
rodzic
commit
ba29fe11f6

+ 5 - 3
rtl/objpas/sysutils/sysutilh.inc

@@ -119,7 +119,9 @@ type
       constructor CreateResHelp(ResString: PString; AHelpContext: Longint);
       constructor CreateResFmtHelp(ResString: PString; const Args: array of const;
         AHelpContext: Longint);
-      Function ToString : String; override;  
+      Function ToString : String; override;
+
+      function GetBaseException : Exception;virtual;
 
       property HelpContext : longint read fhelpcontext write fhelpcontext;
       property Message : string read fmessage write fmessage;
@@ -271,7 +273,7 @@ generic function IfThen<T>(val:boolean;const iftrue:T; const iffalse:T) :T; inli
 
 Var
    OnShowException : Procedure (Msg : ShortString);
-   
+
 Const
    HexDisplayPrefix : string = '$';
 
@@ -326,7 +328,7 @@ Type
 
   { Type Helpers}
   {$i syshelph.inc}
-  
+
   procedure FreeAndNil(var obj);
   procedure FreeMemAndNil(var p);
 

+ 13 - 0
rtl/objpas/sysutils/sysutils.inc

@@ -254,6 +254,19 @@ end;
     end;
 
 
+    function Exception.GetBaseException : Exception;
+      var
+        _ExceptObjectStack : PExceptObject;
+      begin
+        _ExceptObjectStack:=RaiseList;
+        While Assigned(_ExceptObjectStack) do
+          begin
+            result:=Exception(_ExceptObjectStack^.FObject);
+            _ExceptObjectStack:=_ExceptObjectStack^.Next;
+          end;
+      end;
+
+
     Constructor EVariantError.CreateCode (Code : longint);
     begin
        case Code of