* module/rnrs/arithmetic/fixnums.scm (fixnum?): Implemented using
bit-twiddling, and using `define-inlinable'.
fxreverse-bit-field)
(import (only (guile) ash
cons*
+ define-inlinable
inexact->exact
logand
logbit?
lognot
logxor
most-positive-fixnum
- most-negative-fixnum)
+ most-negative-fixnum
+ object-address)
(ice-9 optargs)
(rnrs base (6))
(rnrs control (6))
(define (greatest-fixnum) most-positive-fixnum)
(define (least-fixnum) most-negative-fixnum)
-
- (define (fixnum? obj)
- (and (integer? obj)
- (exact? obj)
- (>= obj most-negative-fixnum)
- (<= obj most-positive-fixnum)))
+
+ (define-inlinable (fixnum? obj)
+ (not (= 0 (logand 2 (object-address obj)))))
(define-syntax assert-fixnum
(syntax-rules ()