mes: Support octal numbers in reader.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 19 May 2017 19:10:08 +0000 (21:10 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 19 May 2017 19:10:08 +0000 (21:10 +0200)
* module/mes/read-0.mes (read-octal): New function.
  (read-word): Use it.
* tests/read.test: Test it.

module/mes/read-0.mes
tests/read.test

index cbaeb022c7d0c9a4f809fe3274e327ad80181345..dcadf77062f347b6dd378645fdc3070f86fcb48c 100644 (file)
            (read-hex c p 1 0)))
      (read-byte) (peek-byte)))
 
+  (define (read-octal)
+    (define (read-octal c p s n)
+      (if (not (or (and (> p 47) (< p 56)))) (* s (+ (ash n 3) (- c 48)))
+          (read-octal (read-byte) (peek-byte) s (+ (ash n 3) (- c 48)))))
+    ((lambda (c p)
+       (if (eq? c 45) (read-octal (read-byte) (peek-byte) -1 0)
+           (read-octal c p 1 0)))
+     (read-byte) (peek-byte)))
+
   (define (reader:read-string)
     (define (append-char s c)
       (append2 s (cons (integer->char c) (list))))
                          (read-word (read-byte) w a)))
      ((eq? c 40) (list->vector (read-list a)))
      ((eq? c 92) (read-character))
+     ((eq? c 111) (read-octal))
      ((eq? c 120) (read-hex))
      ((eq? c 44) (cond ((eq? (peek-byte) 64)
                         (read-byte)
index c23a530ebebbb4ca1e1c06eb12b80dff74afc848..63bf765de1f29029bc7f3a9ebd916bb9ce84efa6 100755 (executable)
@@ -17,6 +17,8 @@ cons
 (display #f) (newline)
 'foo
 (display 'foo) (newline)
+(display #o77) (newline)
+(display #o-6) (newline)
 (display #x16) (newline)
 (display #x-16) (newline)
 (display #\A) (newline)