diff options
author | Ludovic Courtès <[email protected]> | 2025-01-28 14:51:00 +0100 |
---|---|---|
committer | Ludovic Courtès <[email protected]> | 2025-01-28 14:56:14 +0100 |
commit | 3ad2d21671ad56e61c779da253d4396435658198 (patch) | |
tree | 3e266e37816a326e2e1643044a691edddf115897 | |
parent | 72de3752f06de2a64fe8135a0839ca25534b326a (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.scm | 20 | ||||
-rw-r--r-- | tests/gexp.scm | 11 |
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 '() '()) |