diff options
author | Ludovic Courtès <ludo@gnu.org> | 2023-03-16 22:18:52 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2023-03-16 23:03:18 +0100 |
commit | 83128f00e9149f3c1bcd4450eb0ed3620a37149c (patch) | |
tree | 303625d63ded887166ced2f9fe8bd46014c3d0bf /guix | |
parent | 8f219e658d8d2d89a2d6ec10729099130791a3a2 (diff) |
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')
-rw-r--r-- | guix/read-print.scm | 21 |
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) (#\@ |