core: Remove number_to_string.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 23 Dec 2016 21:08:03 +0000 (22:08 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 23 Dec 2016 21:08:03 +0000 (22:08 +0100)
* string.c (number_to_string): Remove.
* module/mes/scm.mes (number->string): New function.

module/mes/scm.mes
string.c

index f8c199246e369205ef224e9a85d374a4be9612b4..2054278244224bad6405000367fde35e02eb8537 100644 (file)
           (if (null? lst) (* sign n)
               (loop (cdr lst) (+ (* n 10) (- (char->integer (car lst)) (char->integer #\0)))))))))
 
+(define (number->string n)
+  (let ((sign (if (< n 0) '(#\-) '())))
+    (let loop ((n (abs n)) (lst '()))
+      (let* ((lst (cons (integer->char (+ (remainder n 10) (char->integer #\0))) lst))
+             (n (quotient n 10)))
+        (if (= 0 n) (list->string (append sign lst))
+            (loop n lst))))))
+
 \f
 ;;; Symbols
 (define (symbol-prefix? prefix symbol)
index 674e53b48644d03d585b2d8b5c58e72199f69f5b..e5ffee18feb9c6e40c591b1bf5fadfe9032ccaad 100644 (file)
--- a/string.c
+++ b/string.c
  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-SCM
-number_to_string (SCM x)
-{
-  assert (TYPE (x) == NUMBER);
-  int n = VALUE (x);
-  SCM p = n < 0 ? cons (MAKE_CHAR ('-'), cell_nil) : cell_nil;
-  do {
-    p = cons (MAKE_CHAR (n % 10 + '0'), p);
-    n = n / 10;
-  } while (n);
-  return MAKE_STRING (p);
-}
-
 SCM
 string_to_symbol (SCM x)
 {