X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fboot.lisp;h=e87e2ee85955754e8b0b0cc8293fa882d5eaf8be;hb=ed3295bc583cd14104130441e9ff1ad40fa5e484;hp=1d25ea590d88f922403eef0d22333b19c9bb1823;hpb=471a5d32673a4c0db86949424d624e6ea3a6a633;p=sbcl.git diff --git a/src/pcl/boot.lisp b/src/pcl/boot.lisp index 1d25ea5..e87e2ee 100644 --- a/src/pcl/boot.lisp +++ b/src/pcl/boot.lisp @@ -1922,14 +1922,21 @@ bootstrapping. (list* dfun cache info) dfun))) (if (eq *boot-state* 'complete) - (setf (gf-dfun-state gf) new-state) + (if (eq (class-of gf) *the-class-standard-generic-function*) + ;; break metacircles: see sbcl-devel 2006-01-15 and #lisp + ;; IRC logs 2006-01-16 for the hilarity. + (setf (clos-slots-ref (get-slots gf) *sgf-dfun-state-index*) + new-state) + (setf (gf-dfun-state gf) new-state)) (setf (clos-slots-ref (get-slots gf) *sgf-dfun-state-index*) new-state))) dfun) (defun gf-dfun-cache (gf) (let ((state (if (eq *boot-state* 'complete) - (gf-dfun-state gf) + (if (eq (class-of gf) *the-class-standard-generic-function*) + (clos-slots-ref (get-slots gf) *sgf-dfun-state-index*) + (gf-dfun-state gf)) (clos-slots-ref (get-slots gf) *sgf-dfun-state-index*)))) (typecase state (function nil) @@ -1937,7 +1944,9 @@ bootstrapping. (defun gf-dfun-info (gf) (let ((state (if (eq *boot-state* 'complete) - (gf-dfun-state gf) + (if (eq (class-of gf) *the-class-standard-generic-function*) + (clos-slots-ref (get-slots gf) *sgf-dfun-state-index*) + (gf-dfun-state gf)) (clos-slots-ref (get-slots gf) *sgf-dfun-state-index*)))) (typecase state (function nil)