From c9fcc68ec19dcebaf16dedb4cb0d3d3c69bfe726 Mon Sep 17 00:00:00 2001 From: florian Date: Tue, 6 Oct 2020 19:43:17 +0000 Subject: [PATCH] * enable the compiler to optimize away parts of System.PushExceptObject, if System.get_frame is not implemented, i.e. returning nil git-svn-id: trunk@47058 - --- rtl/inc/except.inc | 59 ++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/rtl/inc/except.inc b/rtl/inc/except.inc index b3a1e7e96e..e224f7b34d 100644 --- a/rtl/inc/except.inc +++ b/rtl/inc/except.inc @@ -101,40 +101,43 @@ begin writeln ('In PushExceptObject'); {$endif} _ExceptObjectStack:=@ExceptObjectStack; - New(NewObj); + NewObj:=AllocMem(sizeof(TExceptObject)); NewObj^.Next:=_ExceptObjectStack^; _ExceptObjectStack^:=NewObj; NewObj^.FObject:=Obj; NewObj^.Addr:=AnAddr; - NewObj^.refcount:=0; + if assigned(get_frame) then + begin + NewObj^.refcount:=0; - { Backtrace } - curr_frame:=AFrame; - curr_addr:=AnAddr; - frames:=nil; - framecount:=0; - framebufsize:=0; - { The frame pointer of this procedure is used as initial stack bottom value. } - prev_frame:=get_frame; - while (framecount prev_frame) and - (curr_frame=framebufsize) then - begin - inc(framebufsize,16); - reallocmem(frames,framebufsize*sizeof(codepointer)); - end; - frames[framecount]:=curr_addr; - inc(framecount); - End; - NewObj^.framecount:=framecount; - NewObj^.frames:=frames; + { Backtrace } + curr_frame:=AFrame; + curr_addr:=AnAddr; + frames:=nil; + framecount:=0; + framebufsize:=0; + { The frame pointer of this procedure is used as initial stack bottom value. } + prev_frame:=get_frame; + while (framecount prev_frame) and + (curr_frame=framebufsize) then + begin + inc(framebufsize,16); + reallocmem(frames,framebufsize*sizeof(codepointer)); + end; + frames[framecount]:=curr_addr; + inc(framecount); + End; + NewObj^.framecount:=framecount; + NewObj^.frames:=frames; + end; Result:=NewObj; end;