[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug in all AAAI PCLs



There is a nasty little bug affecting :ACCESSORs and :WRITERs in all the
AAAI PCLs.  Anyone using a AAAI pcl should make this patch.

* To save yourself some time, you can patch your running image simply by
  loading a compiled version of this function.

* You can fix your compiled PCL simply by editing the dcode.lisp file
  and then using compile-file to compile that file.  compile-pcl will
  work too of course, but will compile more files than really need be.

;from dcode.lisp
(defun all-std-class-writers-miss
       (new-value arg wrapper .cache. cache-size offset generic-function)
  (setq offset (cache-key-from-wrappers-2 cache-size arg))
  (let ((class (wrapper-class wrapper))
	(method (lookup-method-1 generic-function t arg)))
    (if (null method)
	(no-applicable-method generic-function new-value arg)
	(let* ((slot-name (reader/writer-method-slot-name method))
	       (slot-pos (all-std-class-readers-miss-1 class
						       wrapper
						       slot-name)))
	  (if (not (null slot-pos))
	      (progn 
		(without-interrupts
		  (setf (r/w-cache-key) wrapper)
		  (setf (r/w-cache-val) slot-pos))
		(setf (%svref (iwmc-class-static-slots arg) slot-pos)
		      new-value))
	      (setf (slot-value-using-class class arg slot-name)
		    new-value))))))
-------