~ 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