mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-07 08:50:35 +02:00
* changes for fail support
This commit is contained in:
parent
4557f11bac
commit
7efee9b639
@ -193,7 +193,13 @@ asm
|
||||
jz .LHC_5
|
||||
{ init self for the constructor }
|
||||
movl %esi,12(%ebp)
|
||||
jmp .LHC_6
|
||||
{ Why was the VMT reset to zero here ????
|
||||
I need it fail to know if I should
|
||||
zero the VMT field in static objects PM }
|
||||
.LHC_4:
|
||||
{ movl $0,8(%ebp) }
|
||||
.LHC_6:
|
||||
{ is there a VMT address ? }
|
||||
orl %eax,%eax
|
||||
jnz .LHC_7
|
||||
@ -226,6 +232,39 @@ asm
|
||||
.LHC_5:
|
||||
end;
|
||||
|
||||
procedure int_help_fail;assembler;[public,alias:'FPC_HELP_FAIL'];
|
||||
{ should be called with a object that needs to be
|
||||
freed if VMT field is at -1
|
||||
%edi contains VMT offset in object again }
|
||||
asm
|
||||
orl %esi,%esi
|
||||
je .LHF_1
|
||||
cmpl $-1,8(%ebp)
|
||||
je .LHF_2
|
||||
{ reset vmt field to zero for static instances }
|
||||
cmpl $0,8(%ebp)
|
||||
je .LHF_3
|
||||
{ main constructor, we can zero the VMT field now }
|
||||
movl $0,(%esi,%edi,1)
|
||||
.LHF_3:
|
||||
{ we zero esi to indicate failure }
|
||||
xorl %esi,%esi
|
||||
jmp .LHF_1
|
||||
.LHF_2:
|
||||
{ get vmt address in eax }
|
||||
movl (%esi,%edi,1),%eax
|
||||
movl %esi,12(%ebp)
|
||||
{ push object size }
|
||||
pushl (%eax)
|
||||
{ push object position }
|
||||
leal 12(%ebp),%eax
|
||||
pushl %eax
|
||||
call FreeMem
|
||||
{ set both object places to zero }
|
||||
xorl %esi,%esi
|
||||
movl %esi,12(%ebp)
|
||||
.LHF_1:
|
||||
end;
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_HELP_DESTRUCTOR}
|
||||
|
||||
@ -833,7 +872,10 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.52 1999-08-18 10:43:31 pierre
|
||||
Revision 1.53 1999-08-19 12:50:08 pierre
|
||||
* changes for fail support
|
||||
|
||||
Revision 1.52 1999/08/18 10:43:31 pierre
|
||||
+ VMT reset to -1 if getmem called, neede for fail
|
||||
|
||||
Revision 1.51 1999/08/09 22:20:02 peter
|
||||
|
Loading…
Reference in New Issue
Block a user