(nreverse collect)))))))
(defun map-specializers (function)
- (map-all-classes #'(lambda (class)
- (funcall function (class-eq-specializer class))
- (funcall function class)))
- (maphash #'(lambda (object methods)
- (declare (ignore methods))
- (intern-eql-specializer object))
+ (map-all-classes (lambda (class)
+ (funcall function (class-eq-specializer class))
+ (funcall function class)))
+ (maphash (lambda (object methods)
+ (declare (ignore methods))
+ (intern-eql-specializer object))
*eql-specializer-methods*)
- (maphash #'(lambda (object specl)
- (declare (ignore object))
- (funcall function specl))
+ (maphash (lambda (object specl)
+ (declare (ignore object))
+ (funcall function specl))
*eql-specializer-table*)
nil)
(defun map-all-generic-functions (function)
(let ((all-generic-functions (make-hash-table :test 'eq)))
- (map-specializers #'(lambda (specl)
- (dolist (gf (specializer-direct-generic-functions
- specl))
- (unless (gethash gf all-generic-functions)
- (setf (gethash gf all-generic-functions) t)
- (funcall function gf))))))
+ (map-specializers (lambda (specl)
+ (dolist (gf (specializer-direct-generic-functions
+ specl))
+ (unless (gethash gf all-generic-functions)
+ (setf (gethash gf all-generic-functions) t)
+ (funcall function gf))))))
nil)
(defmethod shared-initialize :after ((specl class-eq-specializer)
(ensure-class-values class args)
(setf class (apply #'make-instance meta :name name initargs)
(find-class name) class)
- (inform-type-system-about-class class name)
class))
(defmethod ensure-class-using-class (name (class pcl-class) &rest args &key)
(unless (eq (class-of class) meta) (change-class class meta))
(apply #'reinitialize-instance class initargs)
(setf (find-class name) class)
- (inform-type-system-about-class class name)
class))
(defmethod class-predicate-name ((class t))
&rest initargs
&key)
(map-dependents class
- #'(lambda (dependent)
- (apply #'update-dependent class dependent initargs))))
+ (lambda (dependent)
+ (apply #'update-dependent class dependent initargs))))
(defmethod shared-initialize :after ((slotd standard-slot-definition)
slot-names &key)
(if direct-slots-p
(setf (slot-value class 'direct-slots)
(setq direct-slots
- (mapcar #'(lambda (pl)
- (when defstruct-p
- (let* ((slot-name (getf pl :name))
- (acc-name
- (format nil
- "~S structure class ~A"
- name slot-name))
- (accessor (intern acc-name)))
- (setq pl (list* :defstruct-accessor-symbol
- accessor pl))))
- (make-direct-slotd class pl))
+ (mapcar (lambda (pl)
+ (when defstruct-p
+ (let* ((slot-name (getf pl :name))
+ (acc-name
+ (format nil
+ "~S structure class ~A"
+ name slot-name))
+ (accessor (intern acc-name)))
+ (setq pl (list* :defstruct-accessor-symbol
+ accessor pl))))
+ (make-direct-slotd class pl))
direct-slots)))
(setq direct-slots (slot-value class 'direct-slots)))
(when defstruct-p
(multiple-value-bind (defstruct-form constructor reader-names writer-names)
(make-structure-class-defstruct-form name direct-slots include)
(unless (structure-type-p name) (eval defstruct-form))
- (mapc #'(lambda (dslotd reader-name writer-name)
- (let* ((reader (gdefinition reader-name))
- (writer (when (gboundp writer-name)
- (gdefinition writer-name))))
- (setf (slot-value dslotd 'internal-reader-function)
- reader)
- (setf (slot-value dslotd 'internal-writer-function)
- writer)))
+ (mapc (lambda (dslotd reader-name writer-name)
+ (let* ((reader (gdefinition reader-name))
+ (writer (when (gboundp writer-name)
+ (gdefinition writer-name))))
+ (setf (slot-value dslotd 'internal-reader-function)
+ reader)
+ (setf (slot-value dslotd 'internal-writer-function)
+ writer)))
direct-slots reader-names writer-names)
(setf (slot-value class 'defstruct-form) defstruct-form)
(setf (slot-value class 'defstruct-constructor) constructor))))
(dolist (r (slot-definition-readers dslotd)) (fix r slot-name 'r))
(dolist (w (slot-definition-writers dslotd)) (fix w slot-name 'w))))))
\f
-(defun add-direct-subclasses (class new)
- (dolist (n new)
+(defun add-direct-subclasses (class supers)
+ (dolist (super supers)
(unless (memq class (class-direct-subclasses class))
- (add-direct-subclass n class))))
+ (add-direct-subclass super class))))
-(defun remove-direct-subclasses (class new)
+(defun remove-direct-subclasses (class supers)
(let ((old (class-direct-superclasses class)))
- (dolist (o (set-difference old new))
+ (dolist (o (set-difference old supers))
(remove-direct-subclass o class))))
\f
(defmethod finalize-inheritance ((class std-class))
(setf (gethash gf gf-table) t))
(mapc #'collect-gfs (class-direct-superclasses class))))
(collect-gfs class)
- (maphash #'(lambda (gf ignore)
- (declare (ignore ignore))
- (update-gf-dfun class gf))
+ (maphash (lambda (gf ignore)
+ (declare (ignore ignore))
+ (update-gf-dfun class gf))
gf-table)))))
(defun update-inits (class inits)
(if entry
(push d (cdr entry))
(push (list name d) name-dslotds-alist))))))
- (mapcar #'(lambda (direct)
- (compute-effective-slot-definition class
- (nreverse (cdr direct))))
+ (mapcar (lambda (direct)
+ (compute-effective-slot-definition class
+ (nreverse (cdr direct))))
name-dslotds-alist)))
(defmethod compute-slots :around ((class std-class))
eslotds))
(defmethod compute-slots ((class structure-class))
- (mapcan #'(lambda (superclass)
- (mapcar #'(lambda (dslotd)
- (compute-effective-slot-definition class
- (list dslotd)))
- (class-direct-slots superclass)))
+ (mapcan (lambda (superclass)
+ (mapcar (lambda (dslotd)
+ (compute-effective-slot-definition class
+ (list dslotd)))
+ (class-direct-slots superclass)))
(reverse (slot-value class 'class-precedence-list))))
(defmethod compute-slots :around ((class structure-class))
;;;
;;; *** This needs work to make type testing by the writer functions which
;;; *** do type testing faster. The idea would be to have one constructor
-;;; *** for each possible type test. In order to do this it would be nice
-;;; *** to have help from inform-type-system-about-class and friends.
+;;; *** for each possible type test.
;;;
;;; *** There is a subtle bug here which is going to have to be fixed.
;;; *** Namely, the simplistic use of the template has to be fixed. We
(defmethod make-boundp-method-function ((class slot-class) slot-name)
(make-std-boundp-method-function (class-name class) slot-name))
\f
-;;;; inform-type-system-about-class
-;;;
-;;; These are NOT part of the standard protocol. They are internal
-;;; mechanism which PCL uses to *try* and tell the type system about
-;;; class definitions. In a more fully integrated implementation of
-;;; CLOS, the type system would know about class objects and class
-;;; names in a more fundamental way and the mechanism used to inform
-;;; the type system about new classes would be different.
-(defmethod inform-type-system-about-class ((class std-class) name)
- (inform-type-system-about-std-class name))
-
-(defmethod inform-type-system-about-class ((class structure-class) (name t))
- nil)
-\f
(defmethod compatible-meta-class-change-p (class proto-new-class)
(eq (class-of class) (class-of proto-new-class)))
(sb-sys:without-interrupts
(update-lisp-class-layout class nwrapper)
(setf (slot-value class 'wrapper) nwrapper)
- (invalidate-wrapper owrapper ':flush nwrapper))))))
+ (invalidate-wrapper owrapper :flush nwrapper))))))
(defun flush-cache-trap (owrapper nwrapper instance)
(declare (ignore owrapper))
(sb-sys:without-interrupts
(update-lisp-class-layout class nwrapper)
(setf (slot-value class 'wrapper) nwrapper)
- (invalidate-wrapper owrapper ':obsolete nwrapper)
+ (invalidate-wrapper owrapper :obsolete nwrapper)
class)))
(defmethod make-instances-obsolete ((class symbol))