M: fixnum eql? eq? ;
M: bignum eql? over bignum? [ = ] [ 2drop f ] if ;
M: ratio eql? over ratio? [ = ] [ 2drop f ] if ;
-M: float eql? over float? [ [ double>bits ] bi@ = ] [ 2drop f ] if ;
+M: float eql? over float? [ [ double>bits ] same? ] [ 2drop f ] if ;
M: complex eql? over complex? [ = ] [ 2drop f ] if ;
! Value info represents a set of objects. Don't mutate value infos
{ [ dup not ] [ drop ] }
{ [ over not ] [ nip ] }
[
- 2dup [ length ] bi@ =
+ 2dup [ length ] same?
[ [ intersect-slot ] 2map ] [ 2drop f ] if
]
} cond ;
: union-slots ( info1 info2 -- slots )
[ slots>> ] bi@
- 2dup [ length ] bi@ =
+ 2dup [ length ] same?
[ [ union-slot ] 2map ] [ 2drop f ] if ;
: (value-info-union) ( info1 info2 -- info )