From d1f01e48457f8cac9e64fb9f890332d5d93f430e Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 13 Dec 2017 14:59:48 +0100 Subject: memoization: Add 'invalidate-memoization!. * guix/memoization.scm (%make-hash-table*): When not profiling, add the new table to %MEMOIZATION-TABLES. (invalidate-memoization!): New procedure. --- guix/memoization.scm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'guix') 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