* release smallsetord, so small sets constant are handled like longints

This commit is contained in:
peter 1998-11-24 13:40:59 +00:00
parent 834e1ed1b1
commit 6f9679f1d2

View File

@ -26,7 +26,7 @@ interface
uses
tree;
{.$define SMALLSETORD}
{$define SMALLSETORD}
procedure secondrealconst(var p : ptree);
@ -251,26 +251,15 @@ implementation
neededtyp : tait;
begin
{$ifdef SMALLSETORD}
{ small sets are loaded as constants }
if psetdef(p^.resulttype)^.settype=smallset then
begin
p^.location.loc:=LOC_MEM;
p^.location.reference.isintvalue:=true;
p^.location.reference.offset:=p^.value_set^[0];
end
else
begin
getdatalabel(lastlabel);
p^.lab_set:=lastlabel;
if (cs_smartlink in aktmoduleswitches) then
consts^.concat(new(pai_cut,init));
consts^.concat(new(pai_label,init(duplabel(lastlabel))));
for i:=0 to 31 do
consts^.concat(new(pai_const,init_8bit(p^.value_set^[i])));
clear_reference(p^.location.reference);
p^.location.reference.symbol:=stringdup(lab2str(p^.lab_set));
p^.location.loc:=LOC_MEM;
p^.location.reference.offset:=plongint(p^.value_set)^;
exit;
end;
{$else}
{$endif}
if psetdef(p^.resulttype)^.settype=smallset then
neededtyp:=ait_const_32bit
else
@ -349,7 +338,6 @@ implementation
clear_reference(p^.location.reference);
p^.location.reference.symbol:=stringdup(lab2str(p^.lab_set));
p^.location.loc:=LOC_MEM;
{$endif SMALLSETORD}
end;
@ -368,7 +356,10 @@ implementation
end.
{
$Log$
Revision 1.21 1998-11-24 12:52:41 peter
Revision 1.22 1998-11-24 13:40:59 peter
* release smallsetord, so small sets constant are handled like longints
Revision 1.21 1998/11/24 12:52:41 peter
* sets are not written twice anymore
* optimize for emptyset+single element which uses a new routine from
set.inc FPC_SET_CREATE_ELEMENT