On Wed, 20 Dec 2023, Hairy Pixels via fpc-pascal wrote:

I feel like this was addressed but I couldn't find any references. The program 
below prints the following:

 Initialize
 Create
 Finalize
 Finalize

Why is Finalize called twice? I thought those were supposed to be called in 
pairs with initialize?

If you look at the generated code, you see that there is an implicit 
try/finally block
and the  finally block does a finalize.

        call    fpc_pushexceptaddr
        movq    %rax,%rdi
        call    fpc_setjmp
        movl    %eax,-92(%rbp)
        cmpl    $0,%eax
        jne     .Lj10
        leaq    -96(%rbp),%rdi
        call    P$TEST$_$TMANAGEDOBJECT_$__$$_CREATE$$TMANAGEDOBJECT
        movq    $INIT_$P$TEST_$$_TMANAGEDOBJECT,%rsi
        leaq    -96(%rbp),%rdi
        call    fpc_finalize
.Lj10:
        call    fpc_popaddrstack
        movq    $INIT_$P$TEST_$$_TMANAGEDOBJECT,%rsi
        leaq    -96(%rbp),%rdi
        call    fpc_finalize
        movl    -92(%rbp),%eax


Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to