aboutsummaryrefslogtreecommitdiff
path: root/guix/utils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/utils.scm')
-rw-r--r--guix/utils.scm20
1 files changed, 20 insertions, 0 deletions
diff --git a/guix/utils.scm b/guix/utils.scm
index a87f119558..2d51e44a22 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -588,6 +588,26 @@ FIELD/DEFAULT-VALUE tuples."
(hash-set! cache args results)
(apply values results)))))))
+(define-syntax hash-set-proc
+ (syntax-rules (eq? eqv? equal?)
+ ((_ eq?) hashq-set!)
+ ((_ eqv?) hashv-set!)
+ ((_ equal?) hash-set!)))
+
+(define-syntax hash-ref*
+ (syntax-rules (eq? eqv? equal?)
+ ((_ table key eq?) (hashq-ref table key))
+ ((_ table key eqv?) (hashv-ref table key))
+ ((_ table key equal?) (hash-ref table key))))
+
+(define-syntax memoizing-lambda
+ (syntax-rules ()
+ ((_ ((arg type) ...) body ...)
+ (let ((cache (make-weak-key-hash-table 100)))
+ (lambda (arg ...)
+ (or (and (hash-ref* cache)))
+ )))))
+
(define (gnu-triplet->nix-system triplet)
"Return the Nix system type corresponding to TRIPLET, a GNU triplet as
returned by `config.guess'."