summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/read-print.scm21
-rw-r--r--tests/read-print.scm15
2 files changed, 36 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)
(#\@
diff --git a/tests/read-print.scm b/tests/read-print.scm
index 952b3e6585..f4627e076a 100644
--- a/tests/read-print.scm
+++ b/tests/read-print.scm
@@ -232,6 +232,21 @@ mnopqrstuvwxyz.\")"
(replace \"gmp\" gmp))")
(test-pretty-print "\
+#~(modify-phases phases
+ (add-after 'whatever 'something-else
+ (lambda _
+ ;; This comment appears inside a gexp.
+ 42)))")
+
+(test-pretty-print "\
+#~(list #$@(list coreutils ;yup
+ grep) ;margin comment
+ #+sed
+
+ ;; Line comment.
+ #$grep)")
+
+(test-pretty-print "\
(package
;; Here 'sha256', 'base32', and 'arguments' must be
;; immediately followed by a newline.