diff options
author | Andy Wingo <wingo@pobox.com> | 2021-03-03 22:56:58 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2021-03-03 22:56:58 +0100 |
commit | ea86a5c6d2f22e331751a685fd6b2c3e2b4d7f8e (patch) | |
tree | 618c34c32f8685204eb05a86e6d5376623dfa0a9 | |
parent | 94279414a83ed682278ad71c5f3ef2cd4fabcc67 (diff) | |
download | guile-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.scm | 15 |
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 #\})) |