~ chicken-core (chicken-5) b489a2fda90258b7bcd40d8967d0c137ba4f479c
commit b489a2fda90258b7bcd40d8967d0c137ba4f479c
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Thu Feb 25 13:57:36 2016 +1300
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Tue Mar 8 22:52:35 2016 +1300
Move fixnum procedures to new chicken.fixnum module
diff --git a/README b/README
index 8333bb74..bf4e13d1 100644
--- a/README
+++ b/README
@@ -292,6 +292,7 @@
| | |-- chicken.eval.import.so
| | |-- chicken.expand.import.so
| | |-- chicken.files.import.so
+ | | |-- chicken.fixnum.import.so
| | |-- chicken.flonum.import.so
| | |-- chicken.foreign.import.so
| | |-- chicken.format.import.so
diff --git a/c-platform.scm b/c-platform.scm
index ad5483cc..8cb1fa59 100644
--- a/c-platform.scm
+++ b/c-platform.scm
@@ -149,15 +149,19 @@
fpfloor fpceiling fptruncate fpround fpsin fpcos fptan fpasin fpacos
fpatan fpatan2 fpexp fpexpt fplog fpsqrt fpabs fpinteger?)))
-(set! default-extended-bindings
- `(bignum? cplxnum? ratnum? ,@flonum-bindings
+(define-constant fixnum-bindings
+ (map (lambda (x) (symbol-append 'chicken.fixnum# x))
+ '(fx* fx*? fx+ fx+? fx- fx-? fx/ fx/? fx< fx<= fx= fx> fx>= fxand
+ fxeven? fxgcd fxior fxlen fxmax fxmin fxmod fxneg fxnot fxodd?
+ fxrem fxshl fxshr fxxor)))
+
+(define-constant extended-bindings
+ '(bignum? cplxnum? fixnum? flonum? ratnum?
chicken.bitwise#integer-length
chicken.bitwise#bitwise-and chicken.bitwise#bitwise-not
chicken.bitwise#bitwise-ior chicken.bitwise#bitwise-xor
chicken.bitwise#arithmetic-shift chicken.bitwise#bit-set?
- add1 sub1 fx+ fx- fx* fx/ fxgcd fx+? fx-? fx*? fx/? fxmod fxrem
- fx= fx> fx< fx>= fx<= fixnum? fxneg fxmax fxmin fxlen fxand fxnot fxior
- fxxor fxshr fxshl fxodd? fxeven? exact-integer? flonum? nan? finite? infinite?
+ add1 sub1 exact-integer? nan? finite? infinite?
void flush-output print print* error call/cc blob-size
identity blob=? equal=? make-polar make-rectangular real-part imag-part
string->symbol symbol-append foldl foldr setter
@@ -212,6 +216,9 @@
chicken.io#read-string chicken.format#format
chicken.format#printf chicken.format#sprintf chicken.format#fprintf))
+(set! default-extended-bindings
+ (append fixnum-bindings flonum-bindings extended-bindings))
+
(set! internal-bindings
'(##sys#slot ##sys#setslot ##sys#block-ref ##sys#block-set!
##sys#call-with-current-continuation ##sys#size ##sys#byte ##sys#setbyte
@@ -527,28 +534,28 @@
(rewrite '##sys#slot 2 2 "C_slot" #t) ; consider as safe, the primitive is unsafe anyway.
(rewrite '##sys#block-ref 2 2 "C_i_block_ref" #t) ;XXX must be safe for pattern matcher (anymore?)
(rewrite '##sys#size 2 1 "C_block_size" #t)
-(rewrite 'fxnot 2 1 "C_fixnum_not" #t)
-(rewrite 'fx* 2 2 "C_fixnum_times" #t)
-(rewrite 'fx+? 2 2 "C_i_o_fixnum_plus" #t)
-(rewrite 'fx-? 2 2 "C_i_o_fixnum_difference" #t)
-(rewrite 'fx*? 2 2 "C_i_o_fixnum_times" #t)
-(rewrite 'fx/? 2 2 "C_i_o_fixnum_quotient" #t)
-(rewrite 'fx= 2 2 "C_eqp" #t)
-(rewrite 'fx> 2 2 "C_fixnum_greaterp" #t)
-(rewrite 'fx< 2 2 "C_fixnum_lessp" #t)
-(rewrite 'fx>= 2 2 "C_fixnum_greater_or_equal_p" #t)
-(rewrite 'fx<= 2 2 "C_fixnum_less_or_equal_p" #t)
+(rewrite 'chicken.fixnum#fxnot 2 1 "C_fixnum_not" #t)
+(rewrite 'chicken.fixnum#fx* 2 2 "C_fixnum_times" #t)
+(rewrite 'chicken.fixnum#fx+? 2 2 "C_i_o_fixnum_plus" #t)
+(rewrite 'chicken.fixnum#fx-? 2 2 "C_i_o_fixnum_difference" #t)
+(rewrite 'chicken.fixnum#fx*? 2 2 "C_i_o_fixnum_times" #t)
+(rewrite 'chicken.fixnum#fx/? 2 2 "C_i_o_fixnum_quotient" #t)
+(rewrite 'chicken.fixnum#fx= 2 2 "C_eqp" #t)
+(rewrite 'chicken.fixnum#fx> 2 2 "C_fixnum_greaterp" #t)
+(rewrite 'chicken.fixnum#fx< 2 2 "C_fixnum_lessp" #t)
+(rewrite 'chicken.fixnum#fx>= 2 2 "C_fixnum_greater_or_equal_p" #t)
+(rewrite 'chicken.fixnum#fx<= 2 2 "C_fixnum_less_or_equal_p" #t)
(rewrite 'chicken.flonum#fp= 2 2 "C_flonum_equalp" #f)
(rewrite 'chicken.flonum#fp> 2 2 "C_flonum_greaterp" #f)
(rewrite 'chicken.flonum#fp< 2 2 "C_flonum_lessp" #f)
(rewrite 'chicken.flonum#fp>= 2 2 "C_flonum_greater_or_equal_p" #f)
(rewrite 'chicken.flonum#fp<= 2 2 "C_flonum_less_or_equal_p" #f)
-(rewrite 'fxmax 2 2 "C_i_fixnum_max" #t)
-(rewrite 'fxmin 2 2 "C_i_fixnum_min" #t)
+(rewrite 'chicken.fixnum#fxmax 2 2 "C_i_fixnum_max" #t)
+(rewrite 'chicken.fixnum#fxmin 2 2 "C_i_fixnum_min" #t)
(rewrite 'chicken.flonum#fpmax 2 2 "C_i_flonum_max" #f)
(rewrite 'chicken.flonum#fpmin 2 2 "C_i_flonum_min" #f)
-(rewrite 'fxgcd 2 2 "C_i_fixnum_gcd" #t)
-(rewrite 'fxlen 2 1 "C_i_fixnum_length" #t)
+(rewrite 'chicken.fixnum#fxgcd 2 2 "C_i_fixnum_gcd" #t)
+(rewrite 'chicken.fixnum#fxlen 2 1 "C_i_fixnum_length" #t)
(rewrite 'char-numeric? 2 1 "C_u_i_char_numericp" #t)
(rewrite 'char-alphabetic? 2 1 "C_u_i_char_alphabeticp" #t)
(rewrite 'char-whitespace? 2 1 "C_u_i_char_whitespacep" #t)
@@ -707,8 +714,8 @@
(rewrite 'even? 17 1 "C_i_evenp" "C_u_i_evenp")
(rewrite 'odd? 17 1 "C_i_oddp" "C_u_i_oddp")
-(rewrite 'fxodd? 2 1 "C_i_fixnumoddp" #t)
-(rewrite 'fxeven? 2 1 "C_i_fixnumevenp" #t)
+(rewrite 'chicken.fixnum#fxodd? 2 1 "C_i_fixnumoddp" #t)
+(rewrite 'chicken.fixnum#fxeven? 2 1 "C_i_fixnumevenp" #t)
(rewrite 'floor 15 'flonum 'fixnum 'chicken.flonum#fpfloor #f)
(rewrite 'ceiling 15 'flonum 'fixnum 'chicken.flonum#fpceiling #f)
@@ -779,17 +786,17 @@
'("C_i_setslot") ) )
callargs) ) ) ) ) )
-(rewrite 'fx+ 17 2 "C_fixnum_plus" "C_u_fixnum_plus")
-(rewrite 'fx- 17 2 "C_fixnum_difference" "C_u_fixnum_difference")
-(rewrite 'fxshl 17 2 "C_fixnum_shift_left")
-(rewrite 'fxshr 17 2 "C_fixnum_shift_right")
-(rewrite 'fxneg 17 1 "C_fixnum_negate" "C_u_fixnum_negate")
-(rewrite 'fxxor 17 2 "C_fixnum_xor" "C_fixnum_xor")
-(rewrite 'fxand 17 2 "C_fixnum_and" "C_u_fixnum_and")
-(rewrite 'fxior 17 2 "C_fixnum_or" "C_u_fixnum_or")
-(rewrite 'fx/ 17 2 "C_fixnum_divide" "C_u_fixnum_divide")
-(rewrite 'fxmod 17 2 "C_fixnum_modulo" "C_u_fixnum_modulo")
-(rewrite 'fxrem 17 2 "C_i_fixnum_remainder_checked")
+(rewrite 'chicken.fixnum#fx+ 17 2 "C_fixnum_plus" "C_u_fixnum_plus")
+(rewrite 'chicken.fixnum#fx- 17 2 "C_fixnum_difference" "C_u_fixnum_difference")
+(rewrite 'chicken.fixnum#fxshl 17 2 "C_fixnum_shift_left")
+(rewrite 'chicken.fixnum#fxshr 17 2 "C_fixnum_shift_right")
+(rewrite 'chicken.fixnum#fxneg 17 1 "C_fixnum_negate" "C_u_fixnum_negate")
+(rewrite 'chicken.fixnum#fxxor 17 2 "C_fixnum_xor" "C_fixnum_xor")
+(rewrite 'chicken.fixnum#fxand 17 2 "C_fixnum_and" "C_u_fixnum_and")
+(rewrite 'chicken.fixnum#fxior 17 2 "C_fixnum_or" "C_u_fixnum_or")
+(rewrite 'chicken.fixnum#fx/ 17 2 "C_fixnum_divide" "C_u_fixnum_divide")
+(rewrite 'chicken.fixnum#fxmod 17 2 "C_fixnum_modulo" "C_u_fixnum_modulo")
+(rewrite 'chicken.fixnum#fxrem 17 2 "C_i_fixnum_remainder_checked")
(rewrite
'chicken.bitwise#arithmetic-shift 8
diff --git a/chicken-install.scm b/chicken-install.scm
index 046af215..be8d4038 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -47,6 +47,7 @@
"chicken.eval.import.so"
"chicken.expand.import.so"
"chicken.files.import.so"
+ "chicken.fixnum.import.so"
"chicken.flonum.import.so"
"chicken.foreign.import.so"
"chicken.format.import.so"
diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index 4b55dbeb..b7ccacb8 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -39,6 +39,8 @@
(no-bound-checks)
(no-procedure-checks))
+(import chicken)
+
(include "common-declarations.scm")
(include "mini-srfi-1.scm")
diff --git a/chicken.import.scm b/chicken.import.scm
index 08945845..cb2ded1d 100644
--- a/chicken.import.scm
+++ b/chicken.import.scm
@@ -70,39 +70,39 @@
features
file-exists?
finite?
- fixnum-bits
- fixnum-precision
+ (fixnum-bits . chicken.fixnum#fixnum-bits)
+ (fixnum-precision . chicken.fixnum#fixnum-precision)
fixnum?
flonum?
flush-output
foldl
foldr
force-finalizers
- fx-
- fx*
- fx/
- fx+
- fx<
- fx<=
- fx=
- fx>
- fx>=
- fxand
- fxeven?
- fxgcd
- fxior
- fxlen
- fxmax
- fxmin
- fxmod
- fxneg
- fxnot
- fxodd?
- fxrem
- fxshl
- fxshr
- fxxor
- fxlen
+ (fx- . chicken.fixnum#fx-)
+ (fx* . chicken.fixnum#fx*)
+ (fx/ . chicken.fixnum#fx/)
+ (fx+ . chicken.fixnum#fx+)
+ (fx< . chicken.fixnum#fx<)
+ (fx<= . chicken.fixnum#fx<=)
+ (fx= . chicken.fixnum#fx=)
+ (fx> . chicken.fixnum#fx>)
+ (fx>= . chicken.fixnum#fx>=)
+ (fxand . chicken.fixnum#fxand)
+ (fxeven? . chicken.fixnum#fxeven?)
+ (fxgcd . chicken.fixnum#fxgcd)
+ (fxior . chicken.fixnum#fxior)
+ (fxlen . chicken.fixnum#fxlen)
+ (fxmax . chicken.fixnum#fxmax)
+ (fxmin . chicken.fixnum#fxmin)
+ (fxmod . chicken.fixnum#fxmod)
+ (fxneg . chicken.fixnum#fxneg)
+ (fxnot . chicken.fixnum#fxnot)
+ (fxodd? . chicken.fixnum#fxodd?)
+ (fxrem . chicken.fixnum#fxrem)
+ (fxshl . chicken.fixnum#fxshl)
+ (fxshr . chicken.fixnum#fxshr)
+ (fxxor . chicken.fixnum#fxxor)
+ (fxlen . chicken.fixnum#fxlen)
gensym
get
get-call-chain
@@ -128,8 +128,8 @@
make-promise
make-property-condition
module-environment
- most-negative-fixnum
- most-positive-fixnum
+ (most-negative-fixnum . chicken.fixnum#most-negative-fixnum)
+ (most-positive-fixnum . chicken.fixnum#most-positive-fixnum)
nan?
notice
on-exit
diff --git a/defaults.make b/defaults.make
index e636c9fd..cce0e26a 100644
--- a/defaults.make
+++ b/defaults.make
@@ -264,8 +264,8 @@ CHICKEN_PROGRAM_OPTIONS += $(if $(PROFILE_OBJECTS),-profile)
PRIMITIVE_IMPORT_LIBRARIES = chicken csi chicken.foreign
DYNAMIC_IMPORT_LIBRARIES = setup-api setup-download srfi-4
-DYNAMIC_CHICKEN_IMPORT_LIBRARIES = bitwise flonum format gc io keyword \
- locative posix pretty-print random time
+DYNAMIC_CHICKEN_IMPORT_LIBRARIES = bitwise fixnum flonum format gc io \
+ keyword locative posix pretty-print random time
DYNAMIC_CHICKEN_UNIT_IMPORT_LIBRARIES = continuation data-structures \
eval expand files internal irregex lolevel ports read-syntax \
repl tcp utils
diff --git a/distribution/manifest b/distribution/manifest
index 3d9c63ba..1531b192 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -258,6 +258,8 @@ chicken.expand.import.scm
chicken.expand.import.c
chicken.files.import.scm
chicken.files.import.c
+chicken.fixnum.import.scm
+chicken.fixnum.import.c
chicken.flonum.import.scm
chicken.flonum.import.c
chicken.foreign.import.scm
diff --git a/eval.scm b/eval.scm
index b3522fd9..635efc23 100644
--- a/eval.scm
+++ b/eval.scm
@@ -1429,6 +1429,8 @@
) ; eval module
+(import chicken chicken.eval)
+
;;; Simple invocation API:
(declare
@@ -1465,13 +1467,13 @@
(define-external (CHICKEN_eval (scheme-object exp) ((c-pointer "C_word") result)) bool
(run-safe
(lambda ()
- (store-result (chicken.eval#eval exp) result))))
+ (store-result (eval exp) result))))
(define-external (CHICKEN_eval_string (c-string str) ((c-pointer "C_word") result)) bool
(run-safe
(lambda ()
(let ((i (open-input-string str)))
- (store-result (chicken.eval#eval (read i)) result)))))
+ (store-result (eval (read i)) result)))))
#>
#define C_copy_result_string(str, buf, n) (C_memcpy((char *)C_block_item(buf, 0), C_c_string(str), C_unfix(n)), ((char *)C_block_item(buf, 0))[ C_unfix(n) ] = '\0', C_SCHEME_TRUE)
@@ -1490,7 +1492,7 @@
(run-safe
(lambda ()
(let ((o (open-output-string)))
- (write (chicken.eval#eval exp) o)
+ (write (eval exp) o)
(store-string (get-output-string o) bufsize buf)) ) ) )
(define-external (CHICKEN_eval_string_to_string (c-string str) ((c-pointer "char") buf)
@@ -1499,7 +1501,7 @@
(run-safe
(lambda ()
(let ((o (open-output-string)))
- (write (chicken.eval#eval (read (open-input-string str))) o)
+ (write (eval (read (open-input-string str))) o)
(store-string (get-output-string o) bufsize buf)) ) ) )
(define-external (CHICKEN_apply (scheme-object func) (scheme-object args)
@@ -1523,7 +1525,7 @@
(store-result (read i) result) ) ) ) )
(define-external (CHICKEN_load (c-string str)) bool
- (run-safe (lambda () (chicken.eval#load str) #t)))
+ (run-safe (lambda () (load str) #t)))
(define-external (CHICKEN_get_error_message ((c-pointer "char") buf) (int bufsize)) void
(store-string (or last-error "No error") bufsize buf) )
diff --git a/expand.scm b/expand.scm
index 43f48c5f..b87f4644 100644
--- a/expand.scm
+++ b/expand.scm
@@ -927,8 +927,7 @@
;;; Macro definitions:
-(import chicken.expand
- chicken.internal)
+(import chicken chicken.expand chicken.internal)
(##sys#extend-macro-environment
'import-syntax '()
diff --git a/library.scm b/library.scm
index ea593d20..463c1721 100644
--- a/library.scm
+++ b/library.scm
@@ -164,6 +164,51 @@ EOF
(provide* library) ; TODO remove after snapshot release
+
+;;; Fixnum arithmetic:
+
+(module chicken.fixnum *
+(import chicken scheme chicken.foreign)
+
+(define most-positive-fixnum (foreign-value "C_MOST_POSITIVE_FIXNUM" int))
+(define most-negative-fixnum (foreign-value "C_MOST_NEGATIVE_FIXNUM" int))
+(define fixnum-bits (foreign-value "(C_WORD_SIZE - 1)" int))
+(define fixnum-precision (foreign-value "(C_WORD_SIZE - (1 + 1))" int))
+
+(define (fx+ x y) (##core#inline "C_fixnum_plus" x y))
+(define (fx- x y) (##core#inline "C_fixnum_difference" x y))
+(define (fx* x y) (##core#inline "C_fixnum_times" x y))
+(define (fx= x y) (eq? x y))
+(define (fx> x y) (##core#inline "C_fixnum_greaterp" x y))
+(define (fx< x y) (##core#inline "C_fixnum_lessp" x y))
+(define (fx>= x y) (##core#inline "C_fixnum_greater_or_equal_p" x y))
+(define (fx<= x y) (##core#inline "C_fixnum_less_or_equal_p" x y))
+(define (fxmin x y) (##core#inline "C_i_fixnum_min" x y))
+(define (fxmax x y) (##core#inline "C_i_fixnum_max" x y))
+(define (fxneg x) (##core#inline "C_fixnum_negate" x))
+(define (fxand x y) (##core#inline "C_fixnum_and" x y))
+(define (fxior x y) (##core#inline "C_fixnum_or" x y))
+(define (fxxor x y) (##core#inline "C_fixnum_xor" x y))
+(define (fxnot x) (##core#inline "C_fixnum_not" x))
+(define (fxshl x y) (##core#inline "C_fixnum_shift_left" x y))
+(define (fxshr x y) (##core#inline "C_fixnum_shift_right" x y))
+(define (fxodd? x) (##core#inline "C_i_fixnumoddp" x))
+(define (fxeven? x) (##core#inline "C_i_fixnumevenp" x))
+(define (fxlen x) (##core#inline "C_i_fixnum_length" x))
+(define (fx/ x y) (##core#inline "C_fixnum_divide" x y) )
+(define (fxgcd x y) (##core#inline "C_i_fixnum_gcd" x y))
+(define (fxmod x y) (##core#inline "C_fixnum_modulo" x y) )
+(define (fxrem x y) (##core#inline "C_i_fixnum_remainder_checked" x y) )
+
+;; these are currently undocumented
+(define (fx+? x y) (##core#inline "C_i_o_fixnum_plus" x y) )
+(define (fx-? x y) (##core#inline "C_i_o_fixnum_difference" x y) )
+(define (fx*? x y) (##core#inline "C_i_o_fixnum_times" x y) )
+(define (fx/? x y) (##core#inline "C_i_o_fixnum_quotient" x y)))
+
+(import chicken.fixnum)
+
+
;;; System routines:
(define (exit #!optional (code 0)) ((##sys#exit-handler) code))
@@ -771,43 +816,7 @@ EOF
;; [MpNT] Tiplea at al., "MpNT: A Multi-Precision Number Theory Package"
;; [MCA] Richard P. Brent & Paul Zimmermann, "Modern Computer Arithmetic"
-(define most-positive-fixnum (foreign-value "C_MOST_POSITIVE_FIXNUM" int))
-(define most-negative-fixnum (foreign-value "C_MOST_NEGATIVE_FIXNUM" int))
-(define fixnum-bits (foreign-value "(C_WORD_SIZE - 1)" int))
-(define fixnum-precision (foreign-value "(C_WORD_SIZE - (1 + 1))" int))
-
(define (fixnum? x) (##core#inline "C_fixnump" x))
-(define (fx+ x y) (##core#inline "C_fixnum_plus" x y))
-(define (fx- x y) (##core#inline "C_fixnum_difference" x y))
-(define (fx* x y) (##core#inline "C_fixnum_times" x y))
-(define (fx= x y) (eq? x y))
-(define (fx> x y) (##core#inline "C_fixnum_greaterp" x y))
-(define (fx< x y) (##core#inline "C_fixnum_lessp" x y))
-(define (fx>= x y) (##core#inline "C_fixnum_greater_or_equal_p" x y))
-(define (fx<= x y) (##core#inline "C_fixnum_less_or_equal_p" x y))
-(define (fxmin x y) (##core#inline "C_i_fixnum_min" x y))
-(define (fxmax x y) (##core#inline "C_i_fixnum_max" x y))
-(define (fxneg x) (##core#inline "C_fixnum_negate" x))
-(define (fxand x y) (##core#inline "C_fixnum_and" x y))
-(define (fxior x y) (##core#inline "C_fixnum_or" x y))
-(define (fxxor x y) (##core#inline "C_fixnum_xor" x y))
-(define (fxnot x) (##core#inline "C_fixnum_not" x))
-(define (fxshl x y) (##core#inline "C_fixnum_shift_left" x y))
-(define (fxshr x y) (##core#inline "C_fixnum_shift_right" x y))
-(define (fxodd? x) (##core#inline "C_i_fixnumoddp" x))
-(define (fxeven? x) (##core#inline "C_i_fixnumevenp" x))
-(define (fxlen x) (##core#inline "C_i_fixnum_length" x))
-(define (fx/ x y) (##core#inline "C_fixnum_divide" x y) )
-(define (fxgcd x y) (##core#inline "C_i_fixnum_gcd" x y))
-(define (fxmod x y) (##core#inline "C_fixnum_modulo" x y) )
-(define (fxrem x y) (##core#inline "C_i_fixnum_remainder_checked" x y) )
-
-;; these are currently undocumented
-(define (fx+? x y) (##core#inline "C_i_o_fixnum_plus" x y) )
-(define (fx-? x y) (##core#inline "C_i_o_fixnum_difference" x y) )
-(define (fx*? x y) (##core#inline "C_i_o_fixnum_times" x y) )
-(define (fx/? x y) (##core#inline "C_i_o_fixnum_quotient" x y) )
-
(define (flonum? x) (##core#inline "C_i_flonump" x))
(define (bignum? x) (##core#inline "C_i_bignump" x))
(define (ratnum? x) (##core#inline "C_i_ratnump" x))
@@ -2073,7 +2082,7 @@ EOF
(module chicken.keyword
(keyword? get-keyword keyword->string string->keyword)
-(import scheme chicken)
+(import scheme chicken chicken.fixnum)
(define (keyword? x)
(and (symbol? x) (fx= 0 (##sys#byte (##sys#slot x 1) 0))) )
@@ -5330,8 +5339,7 @@ EOF
(module chicken.gc
(current-gc-milliseconds gc memory-statistics set-finalizer! set-gc-report!)
-(import scheme chicken
- chicken.foreign)
+(import scheme chicken chicken.fixnum chicken.foreign)
;;; GC info:
diff --git a/manual/Unit library b/manual/Unit library
index d314893c..3d6ad5b3 100644
--- a/manual/Unit library
+++ b/manual/Unit library
@@ -65,6 +65,18 @@ Like {{exact-integer-sqrt}}, but with any base value. Calculates
{{s}} and {{r}} where {{s^N + r = K}} and {{K < (s+1)^N}}.
+==== fixnum?
+
+<procedure>(fixnum? X)</procedure>
+
+Returns {{#t}} if {{X}} is a fixnum, or {{#f}} otherwise.
+
+==== flonum?
+
+<procedure>(flonum? X)</procedure>
+
+Returns {{#t}} if {{X}} is a flonum, or {{#f}} otherwise.
+
==== bignum?
<procedure>(bignum? X)</procedure>
@@ -114,6 +126,9 @@ large numbers.
==== Arithmetic fixnum operations
+The following procedures are provided by the {{(chicken fixnum)}}
+module.
+
<procedure>(fx+ N1 N2)</procedure>
<procedure>(fx- N1 N2)</procedure>
<procedure>(fx* N1 N2)</procedure>
@@ -153,12 +168,6 @@ respectively.
Comparison of fixnums and predicates on them.
-==== fixnum?
-
-<procedure>(fixnum? X)</procedure>
-
-Returns {{#t}} if {{X}} is a fixnum, or {{#f}} otherwise.
-
==== Fixnum limits
<constant>most-positive-fixnum</constant><br>
@@ -213,12 +222,6 @@ application.
Note: {{fpround}} uses the rounding mode that your C library
implements, which is usually different from R5RS.
-==== flonum?
-
-<procedure>(flonum? X)</procedure>
-
-Returns {{#t}} if {{X}} is a flonum, or {{#f}} otherwise.
-
==== Flonum limits
<constant>maximum-flonum</constant><br>
diff --git a/modules.scm b/modules.scm
index e8fd6d86..6fcd1be3 100644
--- a/modules.scm
+++ b/modules.scm
@@ -947,6 +947,7 @@
(##sys#register-module-alias 'data-structures 'chicken.data-structures)
(##sys#register-module-alias 'expand 'chicken.expand)
(##sys#register-module-alias 'files 'chicken.files)
+(##sys#register-module-alias 'fixnum 'chicken.fixnum)
(##sys#register-module-alias 'flonum 'chicken.flonum)
(##sys#register-module-alias 'foreign 'chicken.foreign)
(##sys#register-module-alias 'format 'chicken.format)
diff --git a/profiler.scm b/profiler.scm
index a664101a..c13f5658 100644
--- a/profiler.scm
+++ b/profiler.scm
@@ -31,6 +31,8 @@
(unsafe)
(disable-interrupts))
+(import chicken)
+
(include "common-declarations.scm")
(define-foreign-variable profile-id int "C_getpid()")
diff --git a/rules.make b/rules.make
index f5ca9722..f6b309c8 100644
--- a/rules.make
+++ b/rules.make
@@ -519,6 +519,7 @@ $(foreach lib, $(filter-out chicken,$(COMPILER_OBJECTS_1)),\
# special cases for modules not corresponding directly to units
$(eval $(call declare-emitted-import-lib-dependency,chicken.posix,$(POSIXFILE)))
$(eval $(call declare-emitted-import-lib-dependency,chicken.bitwise,library))
+$(eval $(call declare-emitted-import-lib-dependency,chicken.fixnum,library))
$(eval $(call declare-emitted-import-lib-dependency,chicken.flonum,library))
$(eval $(call declare-emitted-import-lib-dependency,chicken.gc,library))
$(eval $(call declare-emitted-import-lib-dependency,chicken.keyword,library))
@@ -761,6 +762,7 @@ bootstrap-lib = $(CHICKEN) $(call profile-flags, $@) $< $(CHICKEN_LIBRARY_OPTION
library.c: $(SRCDIR)library.scm $(SRCDIR)banner.scm $(SRCDIR)common-declarations.scm
$(bootstrap-lib) \
-emit-import-library chicken.bitwise \
+ -emit-import-library chicken.fixnum \
-emit-import-library chicken.flonum \
-emit-import-library chicken.gc \
-emit-import-library chicken.keyword \
diff --git a/scheduler.scm b/scheduler.scm
index 078318a7..fd0562e6 100644
--- a/scheduler.scm
+++ b/scheduler.scm
@@ -133,7 +133,7 @@ C_inline void C_fdset_add(int fd, int input, int output) {
EOF
) )
-(import chicken.format)
+(import chicken chicken.format)
(include "common-declarations.scm")
diff --git a/types.db b/types.db
index ccda394a..0f5620a5 100644
--- a/types.db
+++ b/types.db
@@ -285,11 +285,11 @@
((*) (##core#inline "C_i_negativep" #(1))))
(max (#(procedure #:clean #:enforce #:foldable) max (#!rest number) number)
- ((fixnum fixnum) (fxmax #(1) #(2)))
+ ((fixnum fixnum) (chicken.fixnum#fxmax #(1) #(2)))
((float float) (##core#inline "C_i_flonum_max" #(1) #(2))))
(min (#(procedure #:clean #:enforce #:foldable) min (#!rest number) number)
- ((fixnum fixnum) (fxmin #(1) #(2)))
+ ((fixnum fixnum) (chicken.fixnum#fxmin #(1) #(2)))
((float float) (##core#inline "C_i_flonum_min" #(1) #(2))))
(+ (#(procedure #:clean #:enforce #:foldable) + (#!rest number) number)
@@ -403,7 +403,7 @@
(> (#(procedure #:clean #:enforce #:foldable) > (#!rest number) boolean)
(() '#t)
((number) (let ((#(tmp) #(1))) '#t))
- ((fixnum fixnum) (fx> #(1) #(2)))
+ ((fixnum fixnum) (chicken.fixnum#fx> #(1) #(2)))
((float float) (##core#inline "C_flonum_greaterp" #(1) #(2)))
((integer integer) (##core#inline "C_i_integer_greaterp" #(1) #(2)))
((* *) (##core#inline "C_i_greaterp" #(1) #(2))))
@@ -411,7 +411,7 @@
(< (#(procedure #:clean #:enforce #:foldable) < (#!rest number) boolean)
(() '#t)
((number) (let ((#(tmp) #(1))) '#t))
- ((fixnum fixnum) (fx< #(1) #(2)))
+ ((fixnum fixnum) (chicken.fixnum#fx< #(1) #(2)))
((integer integer) (##core#inline "C_i_integer_lessp" #(1) #(2)))
((float float) (##core#inline "C_flonum_lessp" #(1) #(2)))
((* *) (##core#inline "C_i_lessp" #(1) #(2))))
@@ -419,7 +419,7 @@
(>= (#(procedure #:clean #:enforce #:foldable) >= (#!rest number) boolean)
(() '#t)
((number) (let ((#(tmp) #(1))) '#t))
- ((fixnum fixnum) (fx>= #(1) #(2)))
+ ((fixnum fixnum) (chicken.fixnum#fx>= #(1) #(2)))
((integer integer) (##core#inline "C_i_integer_greater_or_equalp" #(1) #(2)))
((float float) (##core#inline "C_flonum_greater_or_equal_p" #(1) #(2)))
((* *) (##core#inline "C_i_greater_or_equalp" #(1) #(2))))
@@ -427,7 +427,7 @@
(<= (#(procedure #:clean #:enforce #:foldable) <= (#!rest number) boolean)
(() '#t)
((number) (let ((#(tmp) #(1))) '#t))
- ((fixnum fixnum) (fx<= #(1) #(2)))
+ ((fixnum fixnum) (chicken.fixnum#fx<= #(1) #(2)))
((integer integer) (##core#inline "C_i_integer_less_or_equalp" #(1) #(2)))
((float float) (##core#inline "C_flonum_less_or_equal_p" #(1) #(2)))
((* *) (##core#inline "C_i_less_or_equalp" #(1) #(2))))
@@ -492,7 +492,7 @@
(gcd (#(procedure #:clean #:enforce #:foldable) gcd (#!rest (or integer float)) (or integer float))
(() '0)
- ((fixnum fixnum) (fixnum) (fxgcd #(1) #(2)))
+ ((fixnum fixnum) (fixnum) (chicken.fixnum#fxgcd #(1) #(2)))
((float float) (float) (chicken.flonum#fpgcd #(1) #(2)))
((integer integer) (integer)
(##core#inline_allocate ("C_s_a_u_i_integer_gcd" 6) #(1) #(2)))
@@ -896,7 +896,11 @@
(exact-integer-sqrt (#(procedure #:clean #:enforce #:foldable) exact-integer-sqrt (integer) integer integer)
((integer) (##sys#exact-integer-sqrt #(1))))
+(fixnum? (#(procedure #:pure #:predicate fixnum) fixnum? (*) boolean))
+(flonum? (#(procedure #:pure #:predicate float) flonum? (*) boolean))
(bignum? (#(procedure #:pure #:predicate bignum) bignum? (*) boolean))
+(ratnum? (#(procedure #:pure #:predicate ratnum) ratnum? (*) boolean))
+(cplxnum? (#(procedure #:pure #:predicate cplxnum) cplxnum? (*) boolean))
(chicken.bitwise#bit-set?
(#(procedure #:clean #:enforce #:foldable) chicken.bitwise#bit-set? (integer integer) boolean)
@@ -978,8 +982,6 @@
(#(procedure #:clean #:enforce) chicken.read-syntax#set-sharp-read-syntax!
(char (or false (procedure (input-port) . *))) undefined))
-(cplxnum? (#(procedure #:pure #:predicate cplxnum) cplxnum? (*) boolean))
-
(current-error-port
(#(procedure #:clean #:enforce) current-error-port (#!optional output-port) output-port)
((output-port) (let ((#(tmp1) #(1)))
@@ -1053,12 +1055,6 @@
((float) (##core#inline "C_u_i_flonum_finitep" #(1)))
((*) (##core#inline "C_i_finitep" #(1))))
-(fixnum-bits fixnum)
-(fixnum-precision fixnum)
-
-(fixnum? (#(procedure #:pure #:predicate fixnum) fixnum? (*) boolean))
-(flonum? (#(procedure #:pure #:predicate float) flonum? (*) boolean))
-
;; flonum
(chicken.flonum#flonum-decimal-precision fixnum)
@@ -1161,31 +1157,37 @@
(chicken.flonum#fptruncate (#(procedure #:clean #:enforce #:foldable) chicken.flonum#fptruncate (float) float)
((float) (##core#inline_allocate ("C_a_i_flonum_truncate" 4) #(1) )))
+;; fixnum
+
+(chicken.fixnum#fixnum-bits fixnum)
+(chicken.fixnum#fixnum-precision fixnum)
+
;;XXX should these be enforcing?
-(fx- (#(procedure #:clean #:foldable) fx- (fixnum fixnum) fixnum))
-(fx* (#(procedure #:clean #:foldable) fx* (fixnum fixnum) fixnum))
-(fx/ (#(procedure #:clean #:foldable) fx/ (fixnum fixnum) fixnum))
-(fxgcd (#(procedure #:clean #:foldable) fxgcd (fixnum fixnum) fixnum))
-(fx+ (#(procedure #:clean #:foldable) fx+ (fixnum fixnum) fixnum))
-(fx< (#(procedure #:clean #:foldable) fx< (fixnum fixnum) boolean))
-(fx<= (#(procedure #:clean #:foldable) fx<= (fixnum fixnum) boolean))
-(fx= (#(procedure #:clean #:foldable) fx= (fixnum fixnum) boolean))
-(fx> (#(procedure #:clean #:foldable) fx> (fixnum fixnum) boolean))
-(fx>= (#(procedure #:clean #:foldable) fx>= (fixnum fixnum) boolean))
-(fxand (#(procedure #:clean #:foldable) fxand (fixnum fixnum) fixnum))
-(fxeven? (#(procedure #:clean #:foldable) fxeven? (fixnum) boolean))
-(fxior (#(procedure #:clean #:foldable) fxior (fixnum fixnum) fixnum))
-(fxmax (#(procedure #:clean #:foldable) fxmax (fixnum fixnum) fixnum))
-(fxmin (#(procedure #:clean #:foldable) fxmin (fixnum fixnum) fixnum))
-(fxmod (#(procedure #:clean #:foldable) fxmod (fixnum fixnum) fixnum))
-(fxrem (#(procedure #:clean #:foldable) fxrem (fixnum fixnum) fixnum))
-(fxneg (#(procedure #:clean #:foldable) fxneg (fixnum) fixnum))
-(fxnot (#(procedure #:clean #:foldable) fxnot (fixnum) fixnum))
-(fxodd? (#(procedure #:clean #:foldable) fxodd? (fixnum) boolean))
-(fxshl (#(procedure #:clean #:foldable) fxshl (fixnum fixnum) fixnum))
-(fxshr (#(procedure #:clean #:foldable) fxshr (fixnum fixnum) fixnum))
-(fxxor (#(procedure #:clean #:foldable) fxxor (fixnum fixnum) fixnum))
-(fxlen (#(procedure #:clean #:foldable) fxlen (fixnum) fixnum))
+(chicken.fixnum#fx- (#(procedure #:clean #:foldable) chicken.fixnum#fx- (fixnum fixnum) fixnum))
+(chicken.fixnum#fx* (#(procedure #:clean #:foldable) chicken.fixnum#fx* (fixnum fixnum) fixnum))
+(chicken.fixnum#fx/ (#(procedure #:clean #:foldable) chicken.fixnum#fx/ (fixnum fixnum) fixnum))
+(chicken.fixnum#fxgcd (#(procedure #:clean #:foldable) chicken.fixnum#fxgcd (fixnum fixnum) fixnum))
+(chicken.fixnum#fx+ (#(procedure #:clean #:foldable) chicken.fixnum#fx+ (fixnum fixnum) fixnum))
+(chicken.fixnum#fx< (#(procedure #:clean #:foldable) chicken.fixnum#fx< (fixnum fixnum) boolean))
+(chicken.fixnum#fx<= (#(procedure #:clean #:foldable) chicken.fixnum#fx<= (fixnum fixnum) boolean))
+(chicken.fixnum#fx= (#(procedure #:clean #:foldable) chicken.fixnum#fx= (fixnum fixnum) boolean))
+(chicken.fixnum#fx> (#(procedure #:clean #:foldable) chicken.fixnum#fx> (fixnum fixnum) boolean))
+(chicken.fixnum#fx>= (#(procedure #:clean #:foldable) chicken.fixnum#fx>= (fixnum fixnum) boolean))
+(chicken.fixnum#fxand (#(procedure #:clean #:foldable) chicken.fixnum#fxand (fixnum fixnum) fixnum))
+(chicken.fixnum#fxeven? (#(procedure #:clean #:foldable) chicken.fixnum#fxeven? (fixnum) boolean))
+(chicken.fixnum#fxior (#(procedure #:clean #:foldable) chicken.fixnum#fxior (fixnum fixnum) fixnum))
+(chicken.fixnum#fxmax (#(procedure #:clean #:foldable) chicken.fixnum#fxmax (fixnum fixnum) fixnum))
+(chicken.fixnum#fxmin (#(procedure #:clean #:foldable) chicken.fixnum#fxmin (fixnum fixnum) fixnum))
+(chicken.fixnum#fxmod (#(procedure #:clean #:foldable) chicken.fixnum#fxmod (fixnum fixnum) fixnum))
+(chicken.fixnum#fxrem (#(procedure #:clean #:foldable) chicken.fixnum#fxrem (fixnum fixnum) fixnum))
+(chicken.fixnum#fxneg (#(procedure #:clean #:foldable) chicken.fixnum#fxneg (fixnum) fixnum))
+(chicken.fixnum#fxnot (#(procedure #:clean #:foldable) chicken.fixnum#fxnot (fixnum) fixnum))
+(chicken.fixnum#fxodd? (#(procedure #:clean #:foldable) chicken.fixnum#fxodd? (fixnum) boolean))
+(chicken.fixnum#fxshl (#(procedure #:clean #:foldable) chicken.fixnum#fxshl (fixnum fixnum) fixnum))
+(chicken.fixnum#fxshr (#(procedure #:clean #:foldable) chicken.fixnum#fxshr (fixnum fixnum) fixnum))
+(chicken.fixnum#fxxor (#(procedure #:clean #:foldable) chicken.fixnum#fxxor (fixnum fixnum) fixnum))
+(chicken.fixnum#fxlen (#(procedure #:clean #:foldable) chicken.fixnum#fxlen (fixnum) fixnum))
+
(gensym (#(procedure #:clean) gensym (#!optional (or string symbol)) symbol))
(get (#(procedure #:clean #:enforce) get (symbol symbol #!optional *) *)
@@ -1231,9 +1233,9 @@
(make-property-condition (#(procedure #:clean #:enforce) make-property-condition (symbol #!rest *) (struct condition)))
(chicken.flonum#maximum-flonum float)
(chicken.flonum#minimum-flonum float)
+(chicken.fixnum#most-negative-fixnum fixnum)
+(chicken.fixnum#most-positive-fixnum fixnum)
(module-environment (#(procedure #:clean #:enforce) module-environment ((or symbol (list-of (or symbol fixnum))) #!optional *) (struct environment)))
-(most-negative-fixnum fixnum)
-(most-positive-fixnum fixnum)
(on-exit (#(procedure #:clean #:enforce) on-exit ((procedure () . *)) undefined))
(open-input-string (#(procedure #:clean #:enforce) open-input-string (string #!rest) input-port))
(open-output-string (#(procedure #:clean) open-output-string (#!rest) output-port))
@@ -1266,8 +1268,6 @@
(quit (procedure quit (#!optional *) noreturn))
-(ratnum? (#(procedure #:pure #:predicate ratnum) ratnum? (*) boolean))
-
(register-feature! (#(procedure #:clean #:enforce) register-feature! (#!rest symbol) undefined))
(remprop! (#(procedure #:clean #:enforce) remprop! (symbol symbol) undefined))
(rename-file (#(procedure #:clean #:enforce) rename-file (string string) string))
@@ -1673,7 +1673,7 @@
(chicken.irregex#irregex-match-num-submatches (#(procedure #:enforce) chicken.irregex#irregex-match-num-submatches ((struct regexp-match)) fixnum)
(((struct regexp-match))
- (fx- (fx/ (##sys#size (##sys#slot #(1) '1)) '4) '2)))
+ (chicken.fixnum#fx- (chicken.fixnum#fx/ (##sys#size (##sys#slot #(1) '1)) '4) '2)))
(chicken.irregex#irregex-new-matches (procedure chicken.irregex#irregex-new-matches (*) *)) ; really only for internal use..
(chicken.irregex#irregex-opt (#(procedure #:clean #:enforce) chicken.irregex#irregex-opt (list) *))
Trap