aboutsummaryrefslogtreecommitdiff
path: root/guix/read-print.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2023-03-16 22:18:52 +0100
committerLudovic Courtès <ludo@gnu.org>2023-03-16 23:03:18 +0100
commit83128f00e9149f3c1bcd4450eb0ed3620a37149c (patch)
tree303625d63ded887166ced2f9fe8bd46014c3d0bf /guix/read-print.scm
parent8f219e658d8d2d89a2d6ec10729099130791a3a2 (diff)
downloadguix-83128f00e9149f3c1bcd4450eb0ed3620a37149c.tar
guix-83128f00e9149f3c1bcd4450eb0ed3620a37149c.tar.gz
read-print: 'read-with-comments' reads comments within gexps.
Fixes <https://issues.guix.gnu.org/62059>. Reported by Maxim Cournoyer <maxim.cournoyer@gmail.com>. * guix/read-print.scm (read-with-comments): Special-case #~, #$, and #+. * tests/read-print.scm: Add two tests.
Diffstat (limited to 'guix/read-print.scm')
-rw-r--r--guix/read-print.scm21
1 files changed, 21 insertions, 0 deletions
diff --git a/guix/read-print.scm b/guix/read-print.scm
index fdc85c2693..515eb7669c 100644
--- a/guix/read-print.scm
+++ b/guix/read-print.scm
@@ -219,6 +219,27 @@ BLANK-LINE? is true, assume PORT is at the beginning of a new line."
(list 'quote (loop #f return)))
((eq? chr #\`)
(list 'quasiquote (loop #f return)))
+ ((eq? chr #\#)
+ (match (read-char port)
+ (#\~ (list 'gexp (loop #f return)))
+ (#\$ (list (match (peek-char port)
+ (#\@
+ (read-char port) ;consume
+ 'ungexp-splicing)
+ (_
+ 'ungexp))
+ (loop #f return)))
+ (#\+ (list (match (peek-char port)
+ (#\@
+ (read-char port) ;consume
+ 'ungexp-native-splicing)
+ (_
+ 'ungexp-native))
+ (loop #f return)))
+ (chr
+ (unread-char chr port)
+ (unread-char #\# port)
+ (read port))))
((eq? chr #\,)
(list (match (peek-char port)
(#\@