~ chicken-r7rs (master) a3e28742ddbe2f50f2d524e9fddbbc29d06ad370
commit a3e28742ddbe2f50f2d524e9fddbbc29d06ad370
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Tue Jul 19 19:35:35 2016 +1200
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Tue Jul 19 19:35:35 2016 +1200
Add a "no-numbers" feature to disable numbers requirement at build time
When installed with "-feature no-numbers", the extension won't require
the numbers egg, but some numeric procedures in the "scheme.base",
"scheme.complex", "scheme.inexact" and "scheme.r5rs" libraries will be
unavailable:
- exact-integer-sqrt
- exact-integer?
- floor-quotient
- floor-remainder
- floor/
- make-polar
- make-rectangular
- nan?
- rationalize
- truncate
- truncate-quotient
- truncate-remainder
- truncate/
diff --git a/r7rs.scm b/r7rs.scm
index 27f4025..e12cb34 100644
--- a/r7rs.scm
+++ b/r7rs.scm
@@ -10,9 +10,12 @@
(require-library r7rs-compile-time))
;; For extended number literals.
- (if (feature? 'compiler-extension)
- (require-library numbers-syntax)
- (require-extension numbers))
+ (cond-expand
+ (no-numbers)
+ (else
+ (if (feature? 'compiler-extension)
+ (require-library numbers-syntax)
+ (require-extension numbers))))
;; For #u8(...) syntax.
(require-extension srfi-4)
diff --git a/scheme.base-interface.scm b/scheme.base-interface.scm
index 1f8d609..82e7d55 100644
--- a/scheme.base-interface.scm
+++ b/scheme.base-interface.scm
@@ -47,14 +47,18 @@
error-object?
even? odd?
exact inexact
+ #|
exact-integer-sqrt
- exact-integer?
+ exact-integer?
+ |#
exact? inexact?
expt
features
file-error?
floor
+ #|
floor/ floor-quotient floor-remainder
+ |#
flush-output-port
for-each
gcd lcm
@@ -108,7 +112,9 @@
quotient remainder
raise raise-continuable
rational?
+ #|
rationalize
+ |#
read-bytevector read-bytevector!
read-char
read-error?
@@ -144,8 +150,10 @@
syntax-rules ; provided by the "r7rs" module
|#
textual-port?
+ #|
truncate
truncate/ truncate-quotient truncate-remainder
+ |#
u8-ready?
unless
#|
diff --git a/scheme.base.scm b/scheme.base.scm
index 21f9989..a71ea19 100644
--- a/scheme.base.scm
+++ b/scheme.base.scm
@@ -3,9 +3,7 @@
(import (rename (except chicken vector-copy! with-exception-handler)
(features feature-keywords)))
-(import (except scheme syntax-rules cond-expand
- assoc member list-tail
- modulo quotient remainder
+(import (except scheme syntax-rules assoc member list-tail
char=? char<? char>? char<=? char>=?
string=? string<? string>? string<=? string>=?
string-copy string->list vector->list vector-fill!))
@@ -33,7 +31,17 @@
(begin-for-syntax
(require-library r7rs-compile-time))
(import r7rs-support)
-(import numbers)
+
+(cond-expand
+ (no-numbers
+ (import (only scheme modulo quotient remainder))
+ (import (only (rename scheme (inexact->exact exact) (exact->inexact inexact)) exact inexact)))
+ (else
+ (import numbers)
+ (export exact-integer? exact-integer-sqrt)
+ (export floor/ floor-quotient floor-remainder)
+ (export rationalize)
+ (export truncate truncate/ truncate-quotient truncate-remainder)))
;; read/write-string/line/byte
(require-library extras)
diff --git a/scheme.complex.scm b/scheme.complex.scm
index 348db94..a221bf3 100644
--- a/scheme.complex.scm
+++ b/scheme.complex.scm
@@ -1,8 +1,8 @@
-(module scheme.complex (angle
- magnitude
- make-rectangular
- make-polar
- imag-part
- real-part)
- (import numbers)
-)
+(module scheme.complex ()
+ (import scheme)
+ (cond-expand
+ (no-numbers
+ (export angle magnitude imag-part real-part))
+ (else
+ (import numbers)
+ (export angle magnitude make-polar make-rectangular imag-part real-part))))
diff --git a/scheme.inexact.scm b/scheme.inexact.scm
index 4d9d687..76c8efd 100644
--- a/scheme.inexact.scm
+++ b/scheme.inexact.scm
@@ -1,13 +1,9 @@
-(module scheme.inexact (acos
- asin
- atan
- exp
- infinite?
- sin
- cos
- tan
- finite?
- log
- sqrt
- nan?)
- (import numbers))
+(module scheme.inexact ()
+ (import scheme)
+ (cond-expand
+ (no-numbers
+ (import chicken)
+ (export acos asin atan exp infinite? sin cos tan finite? log sqrt))
+ (else
+ (import numbers)
+ (export acos asin atan exp infinite? sin cos tan finite? log sqrt nan?))))
diff --git a/scheme.r5rs.scm b/scheme.r5rs.scm
index 1e664ea..6f35d15 100644
--- a/scheme.r5rs.scm
+++ b/scheme.r5rs.scm
@@ -6,8 +6,12 @@
(null-environment %null-environment)
(scheme-report-environment %scheme-report-environment)))
- (import numbers)
- (export angle make-polar make-rectangular rationalize)
+ (cond-expand
+ (no-numbers
+ (export angle))
+ (else
+ (import numbers)
+ (export angle make-polar make-rectangular rationalize)))
(require-extension scheme.eval)
(export null-environment scheme-report-environment)
diff --git a/tests/run.scm b/tests/run.scm
index 454e6c6..238b919 100644
--- a/tests/run.scm
+++ b/tests/run.scm
@@ -50,6 +50,7 @@
(with-output-to-string
(lambda () (include-ci "include-ci.scm"))))))
+#+full-numeric-tower
(test-group "6.2.6: numerical operations"
(test-group "floor/...truncate-remainder"
(test '(2 1) (receive (floor/ 5 2)))
@@ -979,6 +980,7 @@
(test "DSSSL keyword arguments aren't renamed (not R7RS)"
"hello, XXX" (bar who: "XXX")))))
+#+full-numeric-tower
(test-group "define-library"
(test-assert "R7RS libraries use the numbers extension"
(define-library (foo)
Trap