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

View File

@ -638,7 +638,7 @@ implementation
hightree:=genloadnode(pvarsym(srsym),p^.left^.symtable); hightree:=genloadnode(pvarsym(srsym),p^.left^.symtable);
firstpass(hightree); firstpass(hightree);
secondpass(hightree); secondpass(hightree);
emit_mov_loc_ref(hightree^.location,href,S_L); emit_mov_loc_ref(hightree^.location,href,S_L,true);
disposetree(hightree); disposetree(hightree);
end; end;
emitrangecheck(p^.right,p^.left^.resulttype); emitrangecheck(p^.right,p^.left^.resulttype);
@ -942,7 +942,10 @@ implementation
end. end.
{ {
$Log$ $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 * fixes a stabs problem for functions
+ includes a stabs local var for with statements + includes a stabs local var for with statements
the name is with in lowercase followed by an index the name is with in lowercase followed by an index

View File

@ -66,7 +66,7 @@ unit cgai386;
procedure emitcall(const routine:string); 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_loc_reg(const t:tlocation;reg:tregister);
procedure emit_mov_ref_reg64(r : treference;rl,rh : tregister); procedure emit_mov_ref_reg64(r : treference;rl,rh : tregister);
procedure emit_lea_loc_ref(const t:tlocation;const ref:treference;freetemp:boolean); 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; 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 var
hreg : tregister; hreg : tregister;
pushedeax : boolean; pushedeax : boolean;
@ -478,7 +478,8 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
(JM)} (JM)}
del_reference(ref); del_reference(ref);
end; end;
ungetiftemp(t.reference); if freetemp then
ungetiftemp(t.reference);
end; end;
else else
internalerror(330); internalerror(330);
@ -3833,7 +3834,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
end. end.
{ {
$Log$ $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 * tp7 fix
Revision 1.86 2000/03/01 15:36:11 florian Revision 1.86 2000/03/01 15:36:11 florian