Move fixnum-limit code into fixart and rename for consistency.
authorChris Hanson <org/chris-hanson/cph>
Wed, 18 Jan 2017 06:01:41 +0000 (22:01 -0800)
committerChris Hanson <org/chris-hanson/cph>
Wed, 18 Jan 2017 06:01:41 +0000 (22:01 -0800)
src/runtime/arith.scm
src/runtime/fixart.scm
src/runtime/runtime.pkg
src/runtime/stream.scm

index 56b65ac96fb06f6816a91b8d1a5ae6cf1d9c22ed..5603e4933ade43e069447e471a702b39e07e90fa 100644 (file)
@@ -96,8 +96,6 @@ USA.
 (define flo:significand-digits-base-2)
 (define flo:significand-digits-base-10)
 (define int:flonum-integer-limit)
-(define fix:largest-value)
-(define fix:smallest-value)
 
 (define (initialize-microcode-dependencies!)
   (let ((p microcode-id/floating-mantissa-bits))
@@ -115,12 +113,6 @@ USA.
     (set! int:flonum-integer-limit (int:expt 2 p)))
   unspecific)
 
-(define (largest-fixnum)
-  fix:largest-value)
-
-(define (smallest-fixnum)
-  fix:smallest-value)
-
 (define (initialize-package!)
   (initialize-microcode-dependencies!)
   (add-event-receiver! event:after-restore initialize-microcode-dependencies!)
@@ -254,21 +246,6 @@ USA.
     (max/min max complex:max)
     (max/min min complex:min))
 
-  (let loop ((n 1))
-    (if (fix:fixnum? n)
-       (loop (* n 2))
-       (let ((n (- n 1)))
-         (if (not (fix:fixnum? n))
-             (error "Unable to compute largest fixnum:" n))
-         (set! fix:largest-value n))))
-  (let loop ((n -1))
-    (if (fix:fixnum? n)
-       (loop (* n 2))
-       (let ((n (quotient n 2)))
-         (if (not (fix:fixnum? n))
-             (error "Unable to compute smallest fixnum:" n))
-         (set! fix:smallest-value n))))
-
   unspecific)
 \f
 (define (int:max n m)
index 42ab3206f398b2a664eb509ef7c85a52f53a6004..75d183650f25eb071400cc6d6fb6755e4aee8437 100644 (file)
@@ -78,7 +78,7 @@ USA.
 (define-guarantee negative-fixnum "negative fixnum")
 (define-guarantee non-positive-fixnum "non-positive fixnum")
 (define-guarantee non-negative-fixnum "non-negative fixnum")
-
+\f
 (define (guarantee-index-fixnum object #!optional caller)
   (if (not (index-fixnum? object))
       (error:wrong-type-argument object "index integer" caller)))
@@ -92,6 +92,32 @@ USA.
 (define (fix:>= n m) (not (fix:< n m)))
 (define (fix:min n m) (if (fix:< n m) n m))
 (define (fix:max n m) (if (fix:> n m) n m))
+
+(define (fix:largest-value)
+  (force largest-fixnum-promise))
+
+(define largest-fixnum-promise
+  (delay
+    (let loop ((n 1))
+      (if (fix:fixnum? n)
+         (loop (* n 2))
+         (let ((n (- n 1)))
+           (if (not (fix:fixnum? n))
+               (error "Unable to compute largest fixnum:" n))
+           n)))))
+
+(define (fix:smallest-value)
+  (force smallest-fixnum-promise))
+
+(define smallest-fixnum-promise
+  (delay
+    (let loop ((n -1))
+      (if (fix:fixnum? n)
+         (loop (* n 2))
+         (let ((n (quotient n 2)))
+           (if (not (fix:fixnum? n))
+               (error "Unable to compute smallest fixnum:" n))
+           n)))))
 \f
 ;;;; Flonums
 
index aabf22103a40fc696b707504e4dd98b5159c9e32..54d65d483c9d6caa4e0e69a8883a35bba8732edb 100644 (file)
@@ -186,6 +186,8 @@ USA.
   (parent (runtime))
   (export ()
          ;; BEGIN deprecated bindings
+         (largest-fixnum fix:largest-value)
+         (smallest-fixnum fix:smallest-value)
          guarantee-fixnum
          guarantee-index-fixnum
          guarantee-limited-index-fixnum
@@ -211,6 +213,7 @@ USA.
          fix:divide
          fix:fixnum?
          fix:gcd
+         fix:largest-value
          fix:lsh
          fix:max
          fix:min
@@ -220,6 +223,7 @@ USA.
          fix:positive?
          fix:quotient
          fix:remainder
+         fix:smallest-value
          fix:xor
          fix:zero?
          fixnum?
@@ -3291,7 +3295,6 @@ USA.
          inexact?
          integer-divide-quotient
          integer-divide-remainder
-         largest-fixnum
          lcm
          max
          min
@@ -3303,7 +3306,6 @@ USA.
          param:flonum-unparser-cutoff
          quotient
          remainder
-         smallest-fixnum
          square)
   (initialization
    (begin
index e436af828aa1c9a61b707ccebdef75bd7ccd193c..2b592cf397ad87b96563f2569fb73487e56d1e1a 100644 (file)
@@ -279,7 +279,7 @@ USA.
    (letrec
        ((primes (cons-stream 3 (fixnum-filter 5)))
        (fixnum-filter
-        (let ((limit (fix:- (largest-fixnum) 2)))
+        (let ((limit (fix:- (fix:largest-value) 2)))
           (lambda (n)
             (if (fix:<= n limit)
                 (let loop ((ps primes))