From 2d5aa2c3b1db968b775c22d2fa3a5bdffe511bd7 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 16 Aug 2017 11:50:55 +0000 Subject: [PATCH] Handle dotted lists --- read.scm | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/read.scm b/read.scm index 32b95802..de0724c4 100644 --- a/read.scm +++ b/read.scm @@ -672,15 +672,6 @@ (parse fp '() '() #f #f 0 (reg-port fp))))) -(define-c reading-from-file? - "(void *data, int argc, closure _, object k, object port)" - " object result = boolean_f; - Cyc_check_port(data, port); - if (((port_type *)port)->flags == 1) { - result = boolean_t; - } - return_closcall1(data, k, result);") - ; ;; Test code ; ;(let ((fp (open-input-file "tests/begin.scm"))) ; ;(let ((fp (open-input-file "tests/strings.scm"))) @@ -693,6 +684,15 @@ ; (repl)) ;(repl) +(define-c reading-from-file? + "(void *data, int argc, closure _, object k, object port)" + " object result = boolean_f; + Cyc_check_port(data, port); + if (((port_type *)port)->flags == 1) { + result = boolean_t; + } + return_closcall1(data, k, result);") + (define-c read-token "(void *data, int argc, closure _, object k, object port)" " Cyc_io_read_token(data, k, port);") @@ -762,7 +762,10 @@ ((eof-object? t) (error "missing closing parenthesis")) ((Cyc-opaque-eq? t #\)) - (reverse lis)) + (if (and (> (length lis) 2) + (equal? (cadr lis) (string->symbol "."))) + (->dotted-list (reverse lis)) + (reverse lis))) (else (loop (cons t lis) (parse2 fp)))))) ((Cyc-opaque-unsafe-eq? token #\')