* fixed temp ansi handling within array constructor

This commit is contained in:
peter 2000-03-19 11:55:08 +00:00
parent 7d72f3610b
commit 03dcba2fda
3 changed files with 27 additions and 12 deletions

View File

@ -921,7 +921,10 @@ implementation
end
else
if is_ansistring(lt) then
vtype:=vtAnsiString;
begin
vtype:=vtAnsiString;
freetemp:=false;
end;
end;
end;
if vtype=$ff then
@ -949,7 +952,9 @@ implementation
emit_lea_loc_ref(hp^.left^.location,href,freetemp);
end
else
emit_mov_loc_ref(hp^.left^.location,href,S_L);
begin
emit_mov_loc_ref(hp^.left^.location,href,S_L,freetemp);
end;
{ update href to the vtype field and write it }
dec(href.offset,4);
emit_const_ref(A_MOV,S_L,vtype,newreference(href));
@ -962,11 +967,11 @@ implementation
begin
case elesize of
1 :
emit_mov_loc_ref(hp^.left^.location,href,S_B);
emit_mov_loc_ref(hp^.left^.location,href,S_B,freetemp);
2 :
emit_mov_loc_ref(hp^.left^.location,href,S_W);
emit_mov_loc_ref(hp^.left^.location,href,S_W,freetemp);
4 :
emit_mov_loc_ref(hp^.left^.location,href,S_L);
emit_mov_loc_ref(hp^.left^.location,href,S_L,freetemp);
else
internalerror(87656781);
end;
@ -982,7 +987,10 @@ implementation
end.
{
$Log$
Revision 1.104 2000-03-19 08:14:17 peter
Revision 1.105 2000-03-19 11:55:08 peter
* fixed temp ansi handling within array constructor
Revision 1.104 2000/03/19 08:14:17 peter
* small order change for array of const which allows better optimization
Revision 1.103 2000/03/01 15:36:11 florian

View File

@ -638,7 +638,7 @@ implementation
hightree:=genloadnode(pvarsym(srsym),p^.left^.symtable);
firstpass(hightree);
secondpass(hightree);
emit_mov_loc_ref(hightree^.location,href,S_L);
emit_mov_loc_ref(hightree^.location,href,S_L,true);
disposetree(hightree);
end;
emitrangecheck(p^.right,p^.left^.resulttype);
@ -942,7 +942,10 @@ implementation
end.
{
$Log$
Revision 1.72 2000-02-18 20:53:14 pierre
Revision 1.73 2000-03-19 11:55:08 peter
* fixed temp ansi handling within array constructor
Revision 1.72 2000/02/18 20:53:14 pierre
* fixes a stabs problem for functions
+ includes a stabs local var for with statements
the name is with in lowercase followed by an index

View File

@ -66,7 +66,7 @@ unit cgai386;
procedure emitcall(const routine:string);
procedure emit_mov_loc_ref(const t:tlocation;const ref:treference;siz:topsize);
procedure emit_mov_loc_ref(const t:tlocation;const ref:treference;siz:topsize;freetemp:boolean);
procedure emit_mov_loc_reg(const t:tlocation;reg:tregister);
procedure emit_mov_ref_reg64(r : treference;rl,rh : tregister);
procedure emit_lea_loc_ref(const t:tlocation;const ref:treference;freetemp:boolean);
@ -416,7 +416,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
end;
procedure emit_mov_loc_ref(const t:tlocation;const ref:treference;siz:topsize);
procedure emit_mov_loc_ref(const t:tlocation;const ref:treference;siz:topsize;freetemp:boolean);
var
hreg : tregister;
pushedeax : boolean;
@ -478,7 +478,8 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
(JM)}
del_reference(ref);
end;
ungetiftemp(t.reference);
if freetemp then
ungetiftemp(t.reference);
end;
else
internalerror(330);
@ -3833,7 +3834,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
end.
{
$Log$
Revision 1.87 2000-03-19 08:17:36 peter
Revision 1.88 2000-03-19 11:55:08 peter
* fixed temp ansi handling within array constructor
Revision 1.87 2000/03/19 08:17:36 peter
* tp7 fix
Revision 1.86 2000/03/01 15:36:11 florian