diff options
author | Marius Bakke <mbakke@fastmail.com> | 2018-12-22 15:26:30 +0100 |
---|---|---|
committer | Marius Bakke <mbakke@fastmail.com> | 2018-12-22 15:26:30 +0100 |
commit | f30830b2e67d973f2363903dbe5b27269da1901a (patch) | |
tree | 851a3a361cde2e083c418c54a1932bd57096c5a0 /guix/packages.scm | |
parent | 34f1838f04c7c359da8dbba86817499630ce7f01 (diff) | |
parent | 25ec3684e3529fae290d389ba11755c7e7c016ea (diff) | |
download | gnu-guix-f30830b2e67d973f2363903dbe5b27269da1901a.tar gnu-guix-f30830b2e67d973f2363903dbe5b27269da1901a.tar.gz |
Merge branch 'master' into staging
Diffstat (limited to 'guix/packages.scm')
-rw-r--r-- | guix/packages.scm | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/guix/packages.scm b/guix/packages.scm index eab0b3404c..e4c2ac3be5 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -870,14 +870,14 @@ OVERRIDES." SYSTEM." ;; FIXME: This memoization should be associated with the open store, because ;; otherwise it breaks when switching to a different store. - (let ((vals (call-with-values thunk list))) + (let ((result (thunk))) ;; Use `hashq-set!' instead of `hash-set!' because `hash' returns the ;; same value for all structs (as of Guile 2.0.6), and because pointer ;; equality is sufficient in practice. (hashq-set! cache package - `((,system ,@vals) + `((,system . ,result) ,@(or (hashq-ref cache package) '()))) - (apply values vals))) + result)) (define-syntax cached (syntax-rules (=>) @@ -889,10 +889,8 @@ Return the cached result when available." (match (hashq-ref cache package) ((alist (... ...)) (match (assoc-ref alist key) - ((vals (... ...)) - (apply values vals)) - (#f - (cache! cache package key thunk)))) + (#f (cache! cache package key thunk)) + (value value))) (#f (cache! cache package key thunk))))) ((_ package system body ...) |