aboutsummaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-12-13 14:59:48 +0100
committerLudovic Courtès <ludo@gnu.org>2017-12-13 23:11:53 +0100
commitd1f01e48457f8cac9e64fb9f890332d5d93f430e (patch)
treeb819406500ff056fb5e4af81a5a8d3fe30d7cba7 /guix
parent90354e34e386b21451e0b6dab87ff5d9e81a94ae (diff)
downloadgnu-guix-d1f01e48457f8cac9e64fb9f890332d5d93f430e.tar
gnu-guix-d1f01e48457f8cac9e64fb9f890332d5d93f430e.tar.gz
memoization: Add 'invalidate-memoization!.
* guix/memoization.scm (%make-hash-table*): When not profiling, add the new table to %MEMOIZATION-TABLES. (invalidate-memoization!): New procedure.
Diffstat (limited to 'guix')
-rw-r--r--guix/memoization.scm15
1 files changed, 13 insertions, 2 deletions
diff --git a/guix/memoization.scm b/guix/memoization.scm
index 0201fe4cb3..086c4cdc56 100644
--- a/guix/memoization.scm
+++ b/guix/memoization.scm
@@ -21,7 +21,8 @@
#:use-module (ice-9 match)
#:autoload (srfi srfi-1) (count)
#:use-module (srfi srfi-9)
- #:export (memoize
+ #:export (invalidate-memoization!
+ memoize
mlambda
mlambdaq))
@@ -113,11 +114,21 @@ already-cached result."
(cons cache location))
cache))
(lambda (proc location)
- (make-hash-table))))
+ (let ((table (make-hash-table)))
+ (hashq-set! %memoization-tables proc table)
+ table))))
(define-syntax-rule (make-hash-table* proc)
(%make-hash-table* proc (current-source-location)))
+(define (invalidate-memoization! proc)
+ "Invalidate the memoization cache of PROC."
+ (match (hashq-ref %memoization-tables proc)
+ ((? hash-table? table)
+ (hash-clear! table))
+ (((? cache? cache) . _)
+ (hash-clear! (cache-table cache)))))
+
(define* (show-memoization-tables #:optional (port (current-error-port)))
"Display to PORT statistics about the memoization tables."
(define (cache<? p1 p2)