* gen_high_tree now uses an inline node of type in_high_x in most cases

so that it doesn't duplicate any code anymore from ninl.pas (and
    dynamic array support was still missing)
This commit is contained in:
Jonas Maebe 2001-12-10 14:28:47 +00:00
parent e5f6ff03cb
commit 8ddb738e07

View File

@ -539,6 +539,7 @@ implementation
procedure tcallparanode.gen_high_tree(openstring:boolean);
var
temp: tnode;
len : longint;
st : tsymtable;
loadconst : boolean;
@ -551,34 +552,25 @@ implementation
case left.resulttype.def.deftype of
arraydef :
begin
if is_open_array(left.resulttype.def) or
is_array_of_const(left.resulttype.def) then
begin
st:=tloadnode(left).symtable;
srsym:=searchsymonlyin(st,'high'+tvarsym(tloadnode(left).symtableentry).name);
hightree:=cloadnode.create(tvarsym(srsym),st);
loadconst:=false;
end
{ handle via a normal inline in_high_x node }
loadconst := false;
hightree := geninlinenode(in_high_x,false,left.getcopy);
{ only substract low(array) if it's <> 0 }
temp := geninlinenode(in_low_x,false,left.getcopy);
firstpass(temp);
if (temp.nodetype <> ordconstn) or
(tordconstnode(temp).value <> 0) then
hightree := caddnode.create(subn,hightree,temp)
else
begin
{ this is an empty constructor }
len:=tarraydef(left.resulttype.def).highrange-
tarraydef(left.resulttype.def).lowrange;
end;
temp.free;
end;
stringdef :
begin
if openstring then
begin
if is_open_string(left.resulttype.def) then
begin
st:=tloadnode(left).symtable;
srsym:=searchsymonlyin(st,'high'+tvarsym(tloadnode(left).symtableentry).name);
hightree:=cloadnode.create(tvarsym(srsym),st);
loadconst:=false;
end
else
len:=tstringdef(left.resulttype.def).len;
{ handle via a normal inline in_high_x node }
loadconst := false;
hightree := geninlinenode(in_high_x,false,left.getcopy);
end
else
{ passing a string to an array of char }
@ -593,7 +585,10 @@ implementation
begin
hightree:=caddnode.create(subn,geninlinenode(in_length_x,false,left.getcopy),
cordconstnode.create(1,s32bittype));
{
not necessary (JM)
firstpass(hightree);
}
hightree:=ctypeconvnode.create(hightree,s32bittype);
loadconst:=false;
end;
@ -1763,7 +1758,12 @@ begin
end.
{
$Log$
Revision 1.58 2001-11-20 18:49:43 peter
Revision 1.59 2001-12-10 14:28:47 jonas
* gen_high_tree now uses an inline node of type in_high_x in most cases
so that it doesn't duplicate any code anymore from ninl.pas (and
dynamic array support was still missing)
Revision 1.58 2001/11/20 18:49:43 peter
* require overload for cross object overloading
Revision 1.57 2001/11/18 20:18:54 peter