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:
parent
90354e34e3
commit
d1f01e4845
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue