In INT:->STRING
authorStephen Adams <edu/mit/csail/zurich/adams>
Fri, 3 Nov 1995 22:44:19 +0000 (22:44 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Fri, 3 Nov 1995 22:44:19 +0000 (22:44 +0000)
 . removed a DEFINE-INTEGRABLE that was causing unwanted code duplication,
 . Optimized PRINT-SMALL to use fixnum arithmetic when quotient is
   small enough.  Gives 2x speedup for NUMBER->STRING on fixnums,

v7/src/runtime/arith.scm

index 733598efef5f44da99ce4f9518a586d893b98ac6..2d557dcc2f08a7ff7efe61129b170a5ace5e53e7 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: arith.scm,v 1.32 1995/05/10 03:33:08 adams Exp $
+$Id: arith.scm,v 1.33 1995/11/03 22:44:19 adams Exp $
 
 Copyright (c) 1989-94 Massachusetts Institute of Technology
 
@@ -397,7 +397,7 @@ MIT in each case. |#
 ;; performance would move the barriers around.
 
 (define (int:->string number radix)
-  (define-integrable (digits->string value digits)
+  (define (digits->string value digits)
     (list->string
      (if (eq? number value)
         digits
@@ -407,16 +407,22 @@ MIT in each case. |#
     (digits->string
      value
      (let loop ((n value) (tail '()))
-       (cond ((not (int:zero? n))
-             (let ((qr (integer-divide n radix)))
-               (loop (integer-divide-quotient qr)
-                     (cons (digit->char (integer-divide-remainder qr)
-                                        radix)
-                           tail))))
-            ((null? tail)
-             '(#\0))
-            (else
-             tail)))))
+       (if (fix:fixnum? n)
+          (let fixnum-loop ((n n) (tail tail))
+            (cond ((not (fix:zero? n))
+                   (fixnum-loop (fix:quotient n radix)
+                                (cons (digit->char (fix:remainder n radix)
+                                                   radix)
+                                      tail)))
+                  ((null? tail)
+                   '(#\0))
+                  (else
+                   tail)))
+          (let ((qr (integer-divide n radix)))
+            (loop (integer-divide-quotient qr)
+                  (cons (digit->char (integer-divide-remainder qr)
+                                     radix)
+                        tail)))))))
 \f
   (define (print-medium value)
     (digits->string value