Refactor reader.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 25 Dec 2016 11:37:35 +0000 (12:37 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 25 Dec 2016 11:37:35 +0000 (12:37 +0100)
* module/mes/read-0.mes (eat-whitespace): More efficient ordering/peeking.
* module/mes/read-0.mes (read-word): Handle tab.

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

index d1279cae166e6043d657c4aa4a3c91de3b171737..eebedd2b4505d10f167175d57123430efe5d93ed 100644 (file)
                   (cons (quote cond) (cdr clauses))))))
 
   (define (eat-whitespace)
-    (cond
-     ((eq? (peek-byte) 9) (read-byte) (eat-whitespace))
-     ((eq? (peek-byte) 10) (read-byte) (eat-whitespace))
-     ((eq? (peek-byte) 12) (read-byte) (eat-whitespace))
-     ((eq? (peek-byte) 13) (read-byte) (eat-whitespace))
-     ((eq? (peek-byte) 32) (read-byte) (eat-whitespace))
-     ((eq? (peek-byte) 59) (begin (read-line-comment (read-byte))
-                                  (eat-whitespace)))
-     ((eq? (peek-byte) 35) (begin (read-byte)
-                                  (cond ((eq? (peek-byte) 33)
-                                         (read-byte)
-                                         (read-block-comment 33 (read-byte))
-                                         (eat-whitespace))
-                                        ((eq? (peek-byte) 59)
-                                         (read-byte)
-                                         (read-word (read-byte) (list) (list))
-                                         (eat-whitespace))
-                                        ((eq? (peek-byte) 124)
-                                         (read-byte)
-                                         (read-block-comment 124 (read-byte))
-                                         (eat-whitespace))
-                                        (#t (unread-byte 35)))
-))))
-
+    ((lambda (c)
+       (cond
+        ((eq? c 32) (read-byte) (eat-whitespace))
+        ((eq? c 10) (read-byte) (eat-whitespace))
+        ((eq? c 9) (read-byte) (eat-whitespace))
+        ((eq? c 12) (read-byte) (eat-whitespace))
+        ((eq? c 13) (read-byte) (eat-whitespace))
+        ((eq? c 59) (begin (read-line-comment (read-byte))
+                                     (eat-whitespace)))
+        ((eq? c 35) (begin (read-byte)
+                           (cond ((eq? (peek-byte) 33)
+                                  (read-byte)
+                                  (read-block-comment 33 (read-byte))
+                                  (eat-whitespace))
+                                 ((eq? (peek-byte) 59)
+                                  (read-byte)
+                                  (read-word (read-byte) (list) (list))
+                                  (eat-whitespace))
+                                 ((eq? (peek-byte) 124)
+                                  (read-byte)
+                                  (read-block-comment 124 (read-byte))
+                                  (eat-whitespace))
+                                 (#t (unread-byte 35)))))))
+     (peek-byte)))
+  
   (define (read-block-comment s c)
     (if (eq? c s) (if (eq? (peek-byte) 35) (read-byte)
                       (read-block-comment s (read-byte)))
 
   (define (read-word c w a)
     (cond
-      ((eq? c -1) (list))
-      ((eq? c 10) (if (null? w) (read-word (read-byte) (list) a)
+      ((eq? c 32) (if (null? w) (read-word (read-byte) (list) a)
                       (lookup w a)))
-      ((eq? c 12) (read-word 10 w a))
-      ((eq? c 32) (read-word 10 w a))
+      ((eq? c 10) (read-word 32 w a))
+      ((eq? c 9) (read-word 32 w a))
+      ((eq? c 12) (read-word 32 w a))
       ((eq? c 34) (if (null? w) (read-string)
                       (begin (unread-byte c) (lookup w a))))
       ((eq? c 35) (cond
                                                         (list))))))
       ((eq? c 96) (cons (lookup-char c a) (cons (read-word (read-byte) w a) (list))))
       ((eq? c 59) (read-line-comment c) (read-word 10 w a))
+      ((eq? c -1) (list))
       (#t (read-word (read-byte) (append2 w (cons (integer->char c) (list))) a))))
 
   ((lambda (p)
index c29e53d46b42ce0e811ef04557f360f175ba65cb..38c6e16d068aa9e7775f89514fddfdb2ee9e4127 100755 (executable)
@@ -46,6 +46,10 @@ barf
 burp
 |#
 #;(bla) (display "must see!\n")
+(display
+  (lambda (x)
+   #;()#t)
+  )
 (display #(0 1 2)) (newline)
 (display (list '(foo
             #! boo !#
@@ -53,5 +57,4 @@ burp
             )
           ))
 (newline)
-
 ;; TODO: syntax, unsyntax, unsyntax-splicing