From ea86a5c6d2f22e331751a685fd6b2c3e2b4d7f8e Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 3 Mar 2021 22:56:58 +0100 Subject: [PATCH] Fix some srfi-105 parsing errors * module/ice-9/read.scm (%read): Fix parsing errors. --- module/ice-9/read.scm | 15 ++++++++------- 1 file 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 #\}))