I felt that results of this discussion are so important that I created a page in FPC wiki about it:

http://www.freepascal.org/wiki/index.php/Avoiding_implicit_try_finally_section

There's an URL to mail archives of this discussion, and a small demo program that shows trick proposed by Mattias how to avoid this implicit try...finally block.

(I also created Writing_efficient_code page, that links between FPC page and Avoiding_implicit_try_finally_section page).

Michalis.

Michael Van Canneyt wrote:

On Fri, 24 Dec 2004, Mattias Gaertner wrote:


On Fri, 24 Dec 2004 11:49:10 +0100 (W. Europe Standard Time)
Michael Van Canneyt <[EMAIL PROTECTED]> wrote:



On Fri, 24 Dec 2004, Mattias Gaertner wrote:


On Fri, 24 Dec 2004 10:56:24 +0100 (W. Europe Standard Time)
Michael Van Canneyt <[EMAIL PROTECTED]> wrote:


If the answer is yes, then maybe it's safe to compile parts of FPC
sources in lists.inc (like TList.Get) inside {$IMPLICITEXCEPTIONS OFF} ?

Why not put it into a sub proc:

function TList.Get(Index: Integer): Pointer;

 procedure RaiseIndexError;
 begin
   Error(SListIndexError,Index);
 end;

begin
 If (Index<0) or (Index>=FCount) then
   RaiseIndexError;
 Result:=FList^[Index];
end;


The compiler detects that the sub can raise an exception.

And creates the implicit exception frame only in RaiseIndexError.


I have changed the procedure.

Michael.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel


_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to