summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <[email protected]>2025-01-28 14:51:00 +0100
committerLudovic Courtès <[email protected]>2025-01-28 14:56:14 +0100
commit3ad2d21671ad56e61c779da253d4396435658198 (patch)
tree3e266e37816a326e2e1643044a691edddf115897
parent72de3752f06de2a64fe8135a0839ca25534b326a (diff)
gexp: ‘with-parameters’ accepts plain store items in its body.
* guix/gexp.scm (compile-parameterized): Return ‘obj’ as-is when it’s not a struct. * tests/gexp.scm ("with-parameters + store item"): New test. Change-Id: I5b5348b98bce923d07f6fa39b2f0948723011db8
-rw-r--r--guix/gexp.scm20
-rw-r--r--tests/gexp.scm11
2 files changed, 24 insertions, 7 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm
index e44aea6420..ad51bc55b7 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014-2024 Ludovic Courtès <[email protected]>
+;;; Copyright © 2014-2025 Ludovic Courtès <[email protected]>
;;; Copyright © 2018 Clément Lassieur <[email protected]>
;;; Copyright © 2018 Jan Nieuwenhuizen <[email protected]>
;;; Copyright © 2019, 2020 Mathieu Othacehe <[email protected]>
@@ -747,7 +747,12 @@ x86_64-linux when COREUTILS is lowered."
(target (if (memq %current-target-system parameters)
(%current-target-system)
target)))
- (lower-object (thunk) system #:target target))))))))
+ (match (thunk)
+ ((? struct? obj)
+ (lower-object obj system #:target target))
+ (obj ;store item
+ (with-monad %store-monad
+ (return obj)))))))))))
expander => (lambda (parameterized lowered output)
(match (parameterized-bindings parameterized)
@@ -758,10 +763,13 @@ x86_64-linux when COREUTILS is lowered."
(with-fluids* fluids
(map (lambda (thunk) (thunk)) values)
(lambda ()
- ;; Delegate to the expander of the wrapped object.
- (let* ((base (thunk))
- (expand (lookup-expander base)))
- (expand base lowered output)))))))))
+ (match (thunk)
+ ((? struct? base)
+ ;; Delegate to the expander of the wrapped object.
+ (let ((expand (lookup-expander base)))
+ (expand base lowered output)))
+ (obj ;store item
+ obj)))))))))
;;;
diff --git a/tests/gexp.scm b/tests/gexp.scm
index e066076c5c..e870f6cb1b 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014-2024 Ludovic Courtès <[email protected]>
+;;; Copyright © 2014-2025 Ludovic Courtès <[email protected]>
;;; Copyright © 2021-2022 Maxime Devos <[email protected]>
;;;
;;; This file is part of GNU Guix.
@@ -467,6 +467,15 @@
(string=? result
(string-append (derivation->output-path drv)
"/bin/touch"))))))
+
+(test-assert "with-parameters + store item"
+ (let* ((file (add-text-to-store %store "hello.txt" "Hello, world!"))
+ (obj (with-parameters ((%current-system "aarch64-linux"))
+ file))
+ (lowered (run-with-store %store
+ (lower-object obj))))
+ (string=? lowered file)))
+
(test-equal "let-system"
(list `(begin ,(%current-system) #t) '(system-binding)
'low '() '())