mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 01:19:07 +02:00
* 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:
parent
e5f6ff03cb
commit
8ddb738e07
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user