~ 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