mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 21:29:26 +02:00
* g_finalize needs to reset to nil after decr_ref
* support loadref in decr_ref reset to nil
This commit is contained in:
parent
6dc4cd8b82
commit
74f5f05b6d
@ -1358,8 +1358,6 @@ implementation
|
||||
|
||||
|
||||
procedure tcg.a_loadmm_reg_loc(list: taasmoutput; size: tcgsize; const reg: tregister; const loc: tlocation;shuffle : pmmshuffle);
|
||||
var
|
||||
tmpreg: tregister;
|
||||
begin
|
||||
case loc.loc of
|
||||
LOC_MMREGISTER,LOC_CMMREGISTER:
|
||||
@ -1567,6 +1565,7 @@ implementation
|
||||
|
||||
procedure tcg.g_decrrefcount(list : taasmoutput;t: tdef; const ref: treference; loadref:boolean);
|
||||
var
|
||||
hreg : tregister;
|
||||
href : treference;
|
||||
decrfunc : string;
|
||||
needrtti : boolean;
|
||||
@ -1627,7 +1626,18 @@ implementation
|
||||
end;
|
||||
{ Temp locations need always to be reset to 0 }
|
||||
if tg.istemp(ref) then
|
||||
a_load_const_ref(list,OS_ADDR,0,ref);
|
||||
begin
|
||||
if loadref then
|
||||
begin
|
||||
hreg:=getaddressregister(list);
|
||||
a_load_ref_reg(list,OS_ADDR,OS_ADDR,ref,hreg);
|
||||
reference_reset_base(href,hreg,0);
|
||||
a_load_const_ref(list,OS_ADDR,0,href);
|
||||
ungetregister(list,hreg);
|
||||
end
|
||||
else
|
||||
a_load_const_ref(list,OS_ADDR,0,ref);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
@ -1663,6 +1673,7 @@ implementation
|
||||
|
||||
procedure tcg.g_finalize(list : taasmoutput;t : tdef;const ref : treference;loadref : boolean);
|
||||
var
|
||||
hreg : tregister;
|
||||
href : treference;
|
||||
paraloc1,paraloc2 : tparalocation;
|
||||
begin
|
||||
@ -1671,7 +1682,23 @@ implementation
|
||||
if is_ansistring(t) or
|
||||
is_widestring(t) or
|
||||
is_interfacecom(t) then
|
||||
g_decrrefcount(list,t,ref,loadref)
|
||||
begin
|
||||
g_decrrefcount(list,t,ref,loadref);
|
||||
{ Temp locations are already reset to 0 }
|
||||
if not tg.istemp(ref) then
|
||||
begin
|
||||
if loadref then
|
||||
begin
|
||||
hreg:=getaddressregister(list);
|
||||
a_load_ref_reg(list,OS_ADDR,OS_ADDR,ref,hreg);
|
||||
reference_reset_base(href,hreg,0);
|
||||
a_load_const_ref(list,OS_ADDR,0,href);
|
||||
ungetregister(list,hreg);
|
||||
end
|
||||
else
|
||||
a_load_const_ref(list,OS_ADDR,0,ref);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
reference_reset_symbol(href,tstoreddef(t).get_rtti_label(initrtti),0);
|
||||
@ -2112,7 +2139,11 @@ finalization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.151 2004-01-21 22:13:20 peter
|
||||
Revision 1.152 2004-01-22 22:12:21 peter
|
||||
* g_finalize needs to reset to nil after decr_ref
|
||||
* support loadref in decr_ref reset to nil
|
||||
|
||||
Revision 1.151 2004/01/21 22:13:20 peter
|
||||
* decrrefcount resets temps to nil
|
||||
|
||||
Revision 1.150 2004/01/21 21:01:34 peter
|
||||
|
Loading…
Reference in New Issue
Block a user