X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fdfun.lisp;h=0e816d0dddc4e99863503e1a9f1f4d12b77b409b;hb=04c502ea9374372b1cd5d350aa95af4829fbae22;hp=c75394c09adc270b4e7c76c4fbc37567fa1d9668;hpb=14ee896f8d31180cee945d11a8ee677558b944aa;p=sbcl.git diff --git a/src/pcl/dfun.lisp b/src/pcl/dfun.lisp index c75394c..0e816d0 100644 --- a/src/pcl/dfun.lisp +++ b/src/pcl/dfun.lisp @@ -863,21 +863,6 @@ Except see also BREAK-VICIOUS-METACIRCLE. -- CSR, 2003-05-28 (defvar *new-class* nil) -(defvar *free-hash-tables* (mapcar #'list '(eq equal eql))) - -(defmacro with-hash-table ((table test) &body forms) - `(let* ((.free. (assoc ',test *free-hash-tables*)) - (,table (if (cdr .free.) - (pop (cdr .free.)) - (make-hash-table :test ',test)))) - (multiple-value-prog1 - (progn ,@forms) - (clrhash ,table) - (push ,table (cdr .free.))))) - -(defmacro with-eq-hash-table ((table) &body forms) - `(with-hash-table (,table eq) ,@forms)) - (defun final-accessor-dfun-type (gf) (let ((methods (if (early-gf-p gf) (early-gf-methods gf) @@ -915,7 +900,7 @@ Except see also BREAK-VICIOUS-METACIRCLE. -- CSR, 2003-05-28 'writer)))) (defun make-final-accessor-dfun (gf type &optional classes-list new-class) - (with-eq-hash-table (table) + (let ((table (make-hash-table :test #'eq))) (multiple-value-bind (table all-index first second size no-class-slots-p) (make-accessor-table gf type table) (if table @@ -1667,6 +1652,7 @@ Except see also BREAK-VICIOUS-METACIRCLE. -- CSR, 2003-05-28 root))) nil)) +;;; FIXME: Needs a lock. (defvar *effective-method-cache* (make-hash-table :test 'eq)) (defun flush-effective-method-cache (generic-function)