summaryrefslogtreecommitdiff
path: root/module/ice-9
diff options
context:
space:
mode:
authorMaxime Devos <maximedevos@telenet.be>2021-07-18 19:59:32 +0200
committerDaniel Llorens <lloda@sarc.name>2021-08-02 12:15:59 +0200
commitc78c130b1ddef6d6c290533f74ce1fbd51a4b19d (patch)
tree2dd557e2dd300aed81266c717fad15d5b65faacc /module/ice-9
parentd79a226359d28f4a1dc5df136e5544d699903a96 (diff)
downloadguile-c78c130b1ddef6d6c290533f74ce1fbd51a4b19d.tar.gz
ice-9/read: Parse #{}}# properly.
This is a regression since Guile 3.0.2 and breaks compilation of a Guile library. * module/ice-9/read.scm (%read)[read-parenthesized]: When SAW-BRACE? is #t but CH isn't #\#, don't eat CH. * test-suite/tests/reader.test ("#{}#): Add four test cases.
Diffstat (limited to 'module/ice-9')
-rw-r--r--module/ice-9/read.scm7
1 files changed, 5 insertions, 2 deletions
diff --git a/module/ice-9/read.scm b/module/ice-9/read.scm
index ac407739f..283933064 100644
--- a/module/ice-9/read.scm
+++ b/module/ice-9/read.scm
@@ -556,12 +556,15 @@
(string->symbol
(list->string
(let lp ((saw-brace? #f))
- (let ((ch (next-not-eof)))
+ (let lp/inner ((ch (next-not-eof))
+ (saw-brace? saw-brace?))
(cond
(saw-brace?
(if (eqv? ch #\#)
'()
- (cons #\} (lp #f))))
+ ;; Don't eat CH, see
+ ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49623>.
+ (cons #\} (lp/inner ch #f))))
((eqv? ch #\})
(lp #t))
((eqv? ch #\\)