From: Christophe R. <cr...@us...> - 2005-09-06 14:29:11
|
Update of /cvsroot/sbcl/sbcl/src/pcl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1668/src/pcl Modified Files: low.lisp Log Message: 0.9.4.27: Fix bug reported by Cyrus Harmon (sbcl-devel 2005-08-30) ... %FUN-FUN should call itself recursively when given a FUNCALLABLE-INSTANCE ... while I'm at it, fix some bugs / inconsistencies in the general area: * make slot 0 of FUNCALLABLE-INSTANCEs hold the layout, like other instances; * remove the dedicated LAYOUT slot from the objdef for FUNCALLABLE-INSTANCE; * make the clos-slots of PCL-FUNCALLABLE-INSTANCE slot 1, as it always should have been. (The fundamental problem of associating names with functions is not yet fixed, but at least we no longer get something silly like #<FUNCTION #<FUNCTION #<FUNCTION ...>>>) Index: low.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/pcl/low.lisp,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- low.lisp 14 Jul 2005 19:45:42 -0000 1.38 +++ low.lisp 6 Sep 2005 14:29:01 -0000 1.39 @@ -101,17 +101,16 @@ (declare (type function new-value)) (aver (funcallable-instance-p fin)) (setf (funcallable-instance-fun fin) new-value)) +;;; FIXME: these macros should just go away. It's not clear whether +;;; the inline functions defined by +;;; !DEFSTRUCT-WITH-ALTERNATE-METACLASS are as efficient as they could +;;; be; ordinary defstruct accessors are defined as source transforms. (defmacro fsc-instance-p (fin) `(funcallable-instance-p ,fin)) (defmacro fsc-instance-wrapper (fin) `(%funcallable-instance-layout ,fin)) -;;; FIXME: This seems to bear no relation at all to the CLOS-SLOTS -;;; slot in the FUNCALLABLE-INSTANCE structure, above, which -;;; (bizarrely) seems to be set to the NAME of the -;;; FUNCALLABLE-INSTANCE. At least, the index 1 seems to return the -;;; NAME, and the index 2 NIL. Weird. -- CSR, 2002-11-07 (defmacro fsc-instance-slots (fin) - `(%funcallable-instance-info ,fin 0)) + `(%funcallable-instance-info ,fin 1)) (defmacro fsc-instance-hash (fin) `(%funcallable-instance-info ,fin 3)) @@ -183,7 +182,7 @@ (if (if (eq *boot-state* 'complete) (typep fun 'generic-function) (eq (class-of fun) *the-class-standard-generic-function*)) - (setf (%funcallable-instance-info fun 1) new-name) + (setf (%funcallable-instance-info fun 2) new-name) (bug "unanticipated function type"))) ;; Fixup name-to-function mappings in cases where the function ;; hasn't been defined by DEFUN. (FIXME: is this right? This logic |