M\ set intersect [ intersect-quot ] 1 define-partial-eval
-: fixnum-bits ( -- n )
- cell-bits tag-bits get - ;
-
: bit-quot ( #call -- quot/f )
in-d>> second value-info interval>> 0 fixnum-bits [a,b] interval-subset?
[ [ >fixnum ] dip fixnum-bit? ] f ? ;
{ $values { "n" integer } { "tagged" integer } }
{ $description "Outputs a tagged fixnum." } ;
+HELP: fixnum-bits
+{ $values { "n" "number of bits in a fixnum" } } ;
+
HELP: first-bignum
{ $values { "n" "smallest positive integer not representable by a fixnum" } } ;
<<
: cell ( -- n ) OBJ-CELL-SIZE special-object ; foldable
-: (first-bignum) ( m -- n ) tag-bits get - 1 - 2^ ; foldable
+: (fixnum-bits) ( m -- n ) tag-bits get - ; foldable
+
+: (first-bignum) ( m -- n ) (fixnum-bits) 1 - 2^ ; foldable
>>
: cells ( m -- n ) cell * ; inline
: first-bignum ( -- n )
cell-bits (first-bignum) ; inline
+: fixnum-bits ( -- n )
+ cell-bits (fixnum-bits) ; inline
+
: most-positive-fixnum ( -- n )
first-bignum 1 - >fixnum ; inline