diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-12-13 14:59:48 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-12-13 23:11:53 +0100 |
commit | d1f01e48457f8cac9e64fb9f890332d5d93f430e (patch) | |
tree | b819406500ff056fb5e4af81a5a8d3fe30d7cba7 | |
parent | 90354e34e386b21451e0b6dab87ff5d9e81a94ae (diff) | |
download | guix-d1f01e48457f8cac9e64fb9f890332d5d93f430e.tar 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.
-rw-r--r-- | guix/memoization.scm | 15 |
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) |