memoization: Add 'invalidate-memoization!.

* guix/memoization.scm (%make-hash-table*): When not profiling, add the
new table to %MEMOIZATION-TABLES.
(invalidate-memoization!): New procedure.
This commit is contained in:
Ludovic Courtès 2017-12-13 14:59:48 +01:00
parent 90354e34e3
commit d1f01e4845
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 13 additions and 2 deletions

View File

@ -21,7 +21,8 @@
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:autoload (srfi srfi-1) (count) #:autoload (srfi srfi-1) (count)
#:use-module (srfi srfi-9) #:use-module (srfi srfi-9)
#:export (memoize #:export (invalidate-memoization!
memoize
mlambda mlambda
mlambdaq)) mlambdaq))
@ -113,11 +114,21 @@ already-cached result."
(cons cache location)) (cons cache location))
cache)) cache))
(lambda (proc location) (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) (define-syntax-rule (make-hash-table* proc)
(%make-hash-table* proc (current-source-location))) (%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))) (define* (show-memoization-tables #:optional (port (current-error-port)))
"Display to PORT statistics about the memoization tables." "Display to PORT statistics about the memoization tables."
(define (cache<? p1 p2) (define (cache<? p1 p2)