From 4c0856d0e569a053afef1a53006ee239702d40a7 Mon Sep 17 00:00:00 2001 From: ram <ram> Date: Thu, 28 Jan 1993 13:59:37 +0000 Subject: [PATCH] add init-form arg to define-hash-cache. --- code/extensions.lisp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/code/extensions.lisp b/code/extensions.lisp index dbe91a947..7a44f62d6 100644 --- a/code/extensions.lisp +++ b/code/extensions.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/extensions.lisp,v 1.14 1992/12/31 13:36:23 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/extensions.lisp,v 1.14.1.1 1993/01/28 13:59:37 ram Exp $") ;;; ;;; ********************************************************************** ;;; @@ -396,7 +396,11 @@ ;;; DEFINE-HASH-CACHE -- Public ;;; +;;; :INIT-FORM passed as COLD-LOAD-INIT in type system definitions so that +;;; caches can be created before top-level forms run. +;;; (defmacro define-hash-cache (name args &key hash-function hash-bits default + (init-form 'progn) (values 1)) "DEFINE-HASH-CACHE Name ({(Arg-Name Test-Function)}*) {Key Value}* Define a hash cache that associates some number of argument values to a @@ -433,7 +437,11 @@ between 0 and (1- (expt 2 <hash-bits>)). :VALUES <n> - The number of values cached." + The number of values cached. + + :INIT-FORM <name> + The DEFVAR for creating the cache is enclosed in a form with the + specified name. Default PROGN." (let* ((var-name (symbolicate "*" name "-CACHE-VECTOR*")) (nargs (length args)) @@ -533,7 +541,10 @@ (forms `(,fun-name))) `(progn - (defvar ,var-name (make-array ,total-size)) + (defvar ,var-name) + (,init-form + (unless (boundp ,var-name) + (setq ,var-name (make-array ,total-size)))) (proclaim '(type (simple-vector ,total-size) ,var-name)) (proclaim '(inline ,@(inlines))) ,@(forms) -- GitLab