mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-30 00:40:35 +02:00
+ fixed bug0163 (set1 <= set2 support)
This commit is contained in:
parent
b98cdfe34d
commit
b9a674b9fe
@ -377,14 +377,36 @@ implementation
|
||||
{ handle operations }
|
||||
case p^.treetype of
|
||||
equaln,
|
||||
unequaln : begin
|
||||
unequaln
|
||||
{$IfNDef NoSetInclusion}
|
||||
,lten, gten
|
||||
{$EndIf NoSetInclusion}
|
||||
: begin
|
||||
cmpop:=true;
|
||||
del_reference(p^.left^.location.reference);
|
||||
del_reference(p^.right^.location.reference);
|
||||
pushusedregisters(pushedregs,$ff);
|
||||
emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
emitcall('FPC_SET_COMP_SETS',true);
|
||||
{$IfNDef NoSetInclusion}
|
||||
If (p^.treetype in [equaln, unequaln, lten]) Then
|
||||
Begin
|
||||
{$EndIf NoSetInclusion}
|
||||
emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
{$IfNDef NoSetInclusion}
|
||||
End
|
||||
Else {gten = lten, if the arguments are reversed}
|
||||
Begin
|
||||
emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
|
||||
emitpushreferenceaddr(exprasmlist,p^.right^.location.reference);
|
||||
End;
|
||||
Case p^.treetype of
|
||||
equaln, unequaln:
|
||||
{$EndIf NoSetInclusion}
|
||||
emitcall('FPC_SET_COMP_SETS',true);
|
||||
{$IfNDef NoSetInclusion}
|
||||
lten, gten: emitcall('FPC_SET_CONTAINS_SETS',true)
|
||||
End;
|
||||
{$EndIf NoSetInclusion}
|
||||
maybe_loadesi;
|
||||
popusedregisters(pushedregs);
|
||||
ungetiftemp(p^.left^.location.reference);
|
||||
@ -1737,7 +1759,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.39 1999-01-19 10:18:58 florian
|
||||
Revision 1.40 1999-01-20 17:39:22 jonas
|
||||
+ fixed bug0163 (set1 <= set2 support)
|
||||
|
||||
Revision 1.39 1999/01/19 10:18:58 florian
|
||||
* bug with mul. of dwords fixed, reported by Alexander Stohr
|
||||
* some changes to compile with TP
|
||||
+ small enhancements for the new code generator
|
||||
|
@ -545,7 +545,11 @@ implementation
|
||||
end
|
||||
else
|
||||
begin
|
||||
if not(p^.treetype in [addn,subn,symdifn,muln,equaln,unequaln]) then
|
||||
if not(p^.treetype in [addn,subn,symdifn,muln,equaln,unequaln
|
||||
{$IfNDef NoSetInclusion}
|
||||
,lten,gten
|
||||
{$EndIf NoSetInclusion}
|
||||
]) then
|
||||
CGMessage(type_e_set_operation_unknown);
|
||||
{ right def must be a also be set }
|
||||
if (rd^.deftype<>setdef) or not(is_equal(rd,ld)) then
|
||||
@ -634,6 +638,30 @@ implementation
|
||||
end;
|
||||
t:=genordinalconstnode(ord(b),booldef);
|
||||
end;
|
||||
{$IfNDef NoSetInclusion}
|
||||
lten : Begin
|
||||
b := true;
|
||||
For i := 0 to 31 Do
|
||||
If (p^.right^.value_set^[i] And p^.left^.value_set^[i]) <>
|
||||
p^.left^.value_set^[i] Then
|
||||
Begin
|
||||
b := false;
|
||||
Break
|
||||
End;
|
||||
t := genordinalconstnode(ord(b),booldef);
|
||||
End;
|
||||
gten : Begin
|
||||
b := true;
|
||||
For i := 0 to 31 Do
|
||||
If (p^.left^.value_set^[i] And p^.right^.value_set^[i]) <>
|
||||
p^.right^.value_set^[i] Then
|
||||
Begin
|
||||
b := false;
|
||||
Break
|
||||
End;
|
||||
t := genordinalconstnode(ord(b),booldef);
|
||||
End;
|
||||
{$EndIf NoSetInclusion}
|
||||
end;
|
||||
dispose(resultset);
|
||||
disposetree(p);
|
||||
@ -973,7 +1001,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.19 1998-12-30 13:35:35 peter
|
||||
Revision 1.20 1999-01-20 17:39:26 jonas
|
||||
+ fixed bug0163 (set1 <= set2 support)
|
||||
|
||||
Revision 1.19 1998/12/30 13:35:35 peter
|
||||
* fix for boolean=true compares
|
||||
|
||||
Revision 1.18 1998/12/15 17:12:35 peter
|
||||
|
Loading…
Reference in New Issue
Block a user