diff --git a/rtl/inc/except.inc b/rtl/inc/except.inc index 132e7e116c..ebd7d0cba0 100644 --- a/rtl/inc/except.inc +++ b/rtl/inc/except.inc @@ -100,14 +100,24 @@ begin ExceptObjectStack^.Addr:=AnAddr; end; +Procedure DoUnHandledException (Var Obj : TObject; AnAddr : Pointer); + +begin + If ExceptProc<>Nil then + If ExceptObjectStack<>Nil then + TExceptPRoc(ExceptProc)(Obj,AnAddr); + RunError(217); +end; + Function Raiseexcept (Obj : TObject; AnAddr : Pointer) : TObject;[Public, Alias : 'FPC_RAISEEXCEPTION']; begin {$ifdef excdebug} writeln ('In RAiseException'); {$endif} - PushExceptObj(Obj,AnAddr); + If ExceptAddrStack=Nil then + DoUnhandledException (Obj,AnAddr); longjmp(ExceptAddrStack^.Buf^,FPC_Exception); end; @@ -141,6 +151,7 @@ begin ExceptObjectStack:=ExceptObjectStack^.Next; end; + Procedure ReRaise;[Public, Alias : 'FPC_RERAISE']; begin @@ -149,13 +160,8 @@ begin {$endif} PopAddrStack; If ExceptAddrStack=Nil then - begin - If ExceptProc<>Nil then - If ExceptObjectStack<>Nil then - TExceptPRoc(ExceptProc)(ExceptObjectStack^.FObject, - ExceptObjectStack^.Addr); - RunError(217); - end; + DoUnHandledException (ExceptObjectStack^.FObject, + ExceptObjectStack^.Addr); longjmp(ExceptAddrStack^.Buf^,FPC_Exception); end;