|
@@ -1135,13 +1135,19 @@ implementation
|
|
href : treference;
|
|
href : treference;
|
|
tmpreg : tregister;
|
|
tmpreg : tregister;
|
|
list : TAsmList;
|
|
list : TAsmList;
|
|
- needs_inittable: boolean;
|
|
|
|
|
|
+ needs_inittable,
|
|
|
|
+ do_trashing : boolean;
|
|
begin
|
|
begin
|
|
list:=TAsmList(arg);
|
|
list:=TAsmList(arg);
|
|
if (tsym(p).typ=paravarsym) then
|
|
if (tsym(p).typ=paravarsym) then
|
|
begin
|
|
begin
|
|
needs_inittable :=
|
|
needs_inittable :=
|
|
|
|
+ not is_class_or_interface(tparavarsym(p).vardef) and
|
|
tparavarsym(p).vardef.needs_inittable;
|
|
tparavarsym(p).vardef.needs_inittable;
|
|
|
|
+ do_trashing :=
|
|
|
|
+ (localvartrashing <> -1) and
|
|
|
|
+ (not tparavarsym(p).vardef.needs_inittable or
|
|
|
|
+ is_class(tparavarsym(p).vardef));
|
|
case tparavarsym(p).varspez of
|
|
case tparavarsym(p).varspez of
|
|
vs_value :
|
|
vs_value :
|
|
if needs_inittable then
|
|
if needs_inittable then
|
|
@@ -1152,13 +1158,12 @@ implementation
|
|
vs_out :
|
|
vs_out :
|
|
begin
|
|
begin
|
|
if (needs_inittable) or
|
|
if (needs_inittable) or
|
|
- (localvartrashing <> -1) then
|
|
|
|
|
|
+ (do_trashing) then
|
|
begin
|
|
begin
|
|
tmpreg:=cg.getaddressregister(list);
|
|
tmpreg:=cg.getaddressregister(list);
|
|
cg.a_load_loc_reg(list,OS_ADDR,tparavarsym(p).initialloc,tmpreg);
|
|
cg.a_load_loc_reg(list,OS_ADDR,tparavarsym(p).initialloc,tmpreg);
|
|
reference_reset_base(href,tmpreg,0);
|
|
reference_reset_base(href,tmpreg,0);
|
|
- if (localvartrashing <> -1) and
|
|
|
|
- not(needs_inittable) and
|
|
|
|
|
|
+ if do_trashing and
|
|
{ needs separate implementation to trash open arrays }
|
|
{ needs separate implementation to trash open arrays }
|
|
{ since their size is only known at run time }
|
|
{ since their size is only known at run time }
|
|
not is_special_array(tparavarsym(p).vardef) then
|
|
not is_special_array(tparavarsym(p).vardef) then
|
|
@@ -1167,8 +1172,7 @@ implementation
|
|
cg.g_initialize(list,tparavarsym(p).vardef,href);
|
|
cg.g_initialize(list,tparavarsym(p).vardef,href);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
- else if (localvartrashing <> -1) and
|
|
|
|
- not(needs_inittable) and
|
|
|
|
|
|
+ else if do_trashing and
|
|
([vo_is_funcret,vo_is_hidden_para] * tparavarsym(p).varoptions = [vo_is_funcret,vo_is_hidden_para]) then
|
|
([vo_is_funcret,vo_is_hidden_para] * tparavarsym(p).varoptions = [vo_is_funcret,vo_is_hidden_para]) then
|
|
begin
|
|
begin
|
|
tmpreg:=cg.getaddressregister(list);
|
|
tmpreg:=cg.getaddressregister(list);
|