summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2021-03-03 22:56:58 +0100
committerAndy Wingo <wingo@pobox.com>2021-03-03 22:56:58 +0100
commitea86a5c6d2f22e331751a685fd6b2c3e2b4d7f8e (patch)
tree618c34c32f8685204eb05a86e6d5376623dfa0a9
parent94279414a83ed682278ad71c5f3ef2cd4fabcc67 (diff)
downloadguile-ea86a5c6d2f22e331751a685fd6b2c3e2b4d7f8e.tar.gz
Fix some srfi-105 parsing errors
* module/ice-9/read.scm (%read): Fix parsing errors.
-rw-r--r--module/ice-9/read.scm15
1 files changed, 8 insertions, 7 deletions
diff --git a/module/ice-9/read.scm b/module/ice-9/read.scm
index 639b76af6..ee39dfd60 100644
--- a/module/ice-9/read.scm
+++ b/module/ice-9/read.scm
@@ -190,17 +190,18 @@
(and (pair? ls)
(let ((op (car ls))
(ls (cdr ls)))
- (if (null? ls)
- (list op x)
+ (if (and (pair? ls) (null? (cdr ls)))
+ (cons* op x ls)
(let ((tail (extract-infix-list ls)))
(and tail
- (equal? op (car tail))
+ (equal? (strip-annotation op)
+ (strip-annotation (car tail)))
(cons* op x (cdr tail))))))))))
(cond
- ((or (not (eqv? rdelim #\}))) ret) ; Only on {...} lists.
- ((null? ret) ret) ; {} => ()
- ((null? (cdr ret)) (car ret)) ; {x} => x
- ((null? (cddr ret)) ret) ; {x y} => (x y)
+ ((not (eqv? rdelim #\})) ret) ; Only on {...} lists.
+ ((not (pair? ret)) ret) ; {} => ()
+ ((not (pair? (cdr ret))) (car ret)); {x} => x
+ ((not (pair? (cddr ret))) ret) ; {x y} => (x y)
((extract-infix-list ret)) ; {x + y + ... + z} => (+ x y ... z)
(else (cons '$nfx$ ret)))) ; {x y . z} => ($nfx$ x y . z)
(define curly? (eqv? rdelim #\}))