~ruther/guix-local

d1f01e48457f8cac9e64fb9f890332d5d93f430e — Ludovic Courtès 8 years ago 90354e3
memoization: Add 'invalidate-memoization!.

* guix/memoization.scm (%make-hash-table*): When not profiling, add the
new table to %MEMOIZATION-TABLES.
(invalidate-memoization!): New procedure.
1 files changed, 13 insertions(+), 2 deletions(-)

M guix/memoization.scm
M guix/memoization.scm => guix/memoization.scm +13 -2
@@ 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)