;;;; warranty about the software, its performance or its conformity to any
;;;; specification.
-(sb-int:file-comment
- "$Header$")
-
(in-package "SB-PCL")
\f
(defmethod slot-accessor-function ((slotd effective-slot-definition) type)
(writer (setf (slot-definition-writer-function slotd) function))
(boundp (setf (slot-definition-boundp-function slotd) function))))
-(defconstant *slotd-reader-function-std-p* 1)
-(defconstant *slotd-writer-function-std-p* 2)
-(defconstant *slotd-boundp-function-std-p* 4)
-(defconstant *slotd-all-function-std-p* 7)
+(defconstant +slotd-reader-function-std-p+ 1)
+(defconstant +slotd-writer-function-std-p+ 2)
+(defconstant +slotd-boundp-function-std-p+ 4)
+(defconstant +slotd-all-function-std-p+ 7)
(defmethod slot-accessor-std-p ((slotd effective-slot-definition) type)
(let ((flags (slot-value slotd 'accessor-flags)))
(declare (type fixnum flags))
(if (eq type 'all)
- (eql *slotd-all-function-std-p* flags)
+ (eql +slotd-all-function-std-p+ flags)
(let ((mask (ecase type
- (reader *slotd-reader-function-std-p*)
- (writer *slotd-writer-function-std-p*)
- (boundp *slotd-boundp-function-std-p*))))
+ (reader +slotd-reader-function-std-p+)
+ (writer +slotd-writer-function-std-p+)
+ (boundp +slotd-boundp-function-std-p+))))
(declare (type fixnum mask))
(not (zerop (the fixnum (logand mask flags))))))))
(slotd effective-slot-definition)
type)
(let ((mask (ecase type
- (reader *slotd-reader-function-std-p*)
- (writer *slotd-writer-function-std-p*)
- (boundp *slotd-boundp-function-std-p*)))
+ (reader +slotd-reader-function-std-p+)
+ (writer +slotd-writer-function-std-p+)
+ (boundp +slotd-boundp-function-std-p+)))
(flags (slot-value slotd 'accessor-flags)))
(declare (type fixnum mask flags))
(setf (slot-value slotd 'accessor-flags)
(defmethod specializer-method-table ((specializer class-eq-specializer))
*class-eq-specializer-methods*)
-(defmethod add-direct-method ((specializer specializer-with-object) (method method))
+(defmethod add-direct-method ((specializer specializer-with-object)
+ (method method))
(let* ((object (specializer-object specializer))
(table (specializer-method-table specializer))
(entry (gethash object table)))
(cdr entry) ())
method))
-(defmethod remove-direct-method ((specializer specializer-with-object) (method method))
+(defmethod remove-direct-method ((specializer specializer-with-object)
+ (method method))
(let* ((object (specializer-object specializer))
(entry (gethash object (specializer-method-table specializer))))
(when entry
(car (gethash (specializer-object specializer)
(specializer-method-table specializer))))
-(defmethod specializer-direct-generic-functions ((specializer specializer-with-object))
+(defmethod specializer-direct-generic-functions ((specializer
+ specializer-with-object))
(let* ((object (specializer-object specializer))
(entry (gethash object (specializer-method-table specializer))))
(when entry
(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))
+ (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) slot-names &key)
+(defmethod shared-initialize :after ((specl class-eq-specializer)
+ slot-names
+ &key)
(declare (ignore slot-names))
(setf (slot-value specl 'type) `(class-eq ,(specializer-class specl))))
(declare (ignore slot-names))
(setf (slot-value specl 'type) `(eql ,(specializer-object specl))))
\f
-(defun real-load-defclass (name metaclass-name supers slots other accessors)
- (do-standard-defsetfs-for-defclass accessors) ;***
+(defun real-load-defclass (name metaclass-name supers slots other)
(let ((res (apply #'ensure-class name :metaclass metaclass-name
:direct-superclasses supers
:direct-slots slots
class))
(defmethod class-predicate-name ((class t))
- 'function-returning-nil)
+ 'constantly-nil)
(defun ensure-class-values (class args)
(let* ((initargs (copy-list args))
(setq direct-slots
(if direct-slots-p
(setf (slot-value class 'direct-slots)
- (mapcar #'(lambda (pl) (make-direct-slotd class pl)) direct-slots))
+ (mapcar (lambda (pl) (make-direct-slotd class pl))
+ direct-slots))
(slot-value class 'direct-slots)))
(if direct-default-initargs-p
- (setf (plist-value class 'direct-default-initargs) direct-default-initargs)
- (setq direct-default-initargs (plist-value class 'direct-default-initargs)))
+ (setf (plist-value class 'direct-default-initargs)
+ direct-default-initargs)
+ (setq direct-default-initargs
+ (plist-value class 'direct-default-initargs)))
(setf (plist-value class 'class-slot-cells)
(gathering1 (collecting)
(dolist (dslotd direct-slots)
(gather1 (cons (slot-definition-name dslotd)
(if initfunction
(funcall initfunction)
- *slot-unbound*))))))))
+ +slot-unbound+))))))))
(setq predicate-name (if predicate-name-p
(setf (slot-value class 'predicate-name)
(car predicate-name))
(or (slot-value class 'predicate-name)
(setf (slot-value class 'predicate-name)
- (make-class-predicate-name (class-name class))))))
+ (make-class-predicate-name (class-name
+ class))))))
(add-direct-subclasses class direct-superclasses)
(update-class class nil)
(make-class-predicate class predicate-name)
(defmethod shared-initialize :before ((class class) slot-names &key name)
(declare (ignore slot-names name))
+ ;; FIXME: Could this just be CLASS instead of `(CLASS ,CLASS)? If not,
+ ;; why not? (See also similar expression in !BOOTSTRAP-INITIALIZE-CLASS.)
(setf (slot-value class 'type) `(class ,class))
(setf (slot-value class 'class-eq-specializer)
(make-instance 'class-eq-specializer :class class)))
(mapcar #'(lambda (pl)
(when defstruct-p
(let* ((slot-name (getf pl :name))
- (acc-name (format nil "~S structure class ~A"
- name slot-name))
+ (acc-name
+ (format nil
+ "~S structure class ~A"
+ name slot-name))
(accessor (intern acc-name)))
- (setq pl (list* :defstruct-accessor-symbol accessor
- pl))))
+ (setq pl (list* :defstruct-accessor-symbol
+ accessor pl))))
(make-direct-slotd class pl))
direct-slots)))
(setq direct-slots (slot-value class 'direct-slots)))
(:print-function print-std-instance)
(:predicate nil)
(:conc-name ,conc-name)
- (:constructor ,constructor ()))
- ,@(mapcar #'(lambda (slot)
- `(,(slot-definition-name slot)
- *slot-unbound*))
+ (:constructor ,constructor ())
+ (:copier nil))
+ ,@(mapcar (lambda (slot)
+ `(,(slot-definition-name slot)
+ +slot-unbound+))
direct-slots)))
- (reader-names (mapcar #'(lambda (slotd)
- (intern (format nil "~A~A reader" conc-name
- (slot-definition-name slotd))))
+ (reader-names (mapcar (lambda (slotd)
+ (intern (format nil
+ "~A~A reader"
+ conc-name
+ (slot-definition-name
+ slotd))))
direct-slots))
- (writer-names (mapcar #'(lambda (slotd)
- (intern (format nil "~A~A writer" conc-name
- (slot-definition-name slotd))))
+ (writer-names (mapcar (lambda (slotd)
+ (intern (format nil
+ "~A~A writer"
+ conc-name
+ (slot-definition-name
+ slotd))))
direct-slots))
(readers-init
- (mapcar #'(lambda (slotd reader-name)
- (let ((accessor
- (slot-definition-defstruct-accessor-symbol slotd)))
- `(defun ,reader-name (obj)
- (declare (type ,name obj))
- (,accessor obj))))
+ (mapcar (lambda (slotd reader-name)
+ (let ((accessor
+ (slot-definition-defstruct-accessor-symbol
+ slotd)))
+ `(defun ,reader-name (obj)
+ (declare (type ,name obj))
+ (,accessor obj))))
direct-slots reader-names))
(writers-init
- (mapcar #'(lambda (slotd writer-name)
- (let ((accessor
- (slot-definition-defstruct-accessor-symbol slotd)))
- `(defun ,writer-name (nv obj)
- (declare (type ,name obj))
- (setf (,accessor obj) nv))))
+ (mapcar (lambda (slotd writer-name)
+ (let ((accessor
+ (slot-definition-defstruct-accessor-symbol
+ slotd)))
+ `(defun ,writer-name (nv obj)
+ (declare (type ,name obj))
+ (setf (,accessor obj) nv))))
direct-slots writer-names))
(defstruct-form
`(progn
,defstruct
,@readers-init ,@writers-init
- (declare-structure ',name nil nil))))
+ (cons nil nil))))
(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)))
+ (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))))
(car predicate-name))
(or (slot-value class 'predicate-name)
(setf (slot-value class 'predicate-name)
- (make-class-predicate-name (class-name class))))))
+ (make-class-predicate-name
+ (class-name class))))))
(make-class-predicate class predicate-name)
(add-slot-accessors class direct-slots))
;; If there is a change in the shape of the instances then the
;; old class is now obsolete.
(let* ((nlayout (mapcar #'slot-definition-name
- (sort instance-slots #'< :key #'slot-definition-location)))
+ (sort instance-slots #'<
+ :key #'slot-definition-location)))
(nslots (length nlayout))
(nwrapper-class-slots (compute-class-slots class-slots))
(owrapper (class-wrapper class))
(when (and (class-finalized-p class)
(let ((cpl (class-precedence-list class)))
(or (member *the-class-slot-class* cpl)
- (member *the-class-standard-effective-slot-definition* cpl))))
+ (member *the-class-standard-effective-slot-definition*
+ cpl))))
(let ((gf-table (make-hash-table :test 'eq)))
(labels ((collect-gfs (class)
(dolist (gf (specializer-direct-generic-functions class))
allocp t))
(setq initargs (append (slot-definition-initargs slotd) initargs))
(let ((slotd-type (slot-definition-type slotd)))
- (setq type (cond ((eq type 't) slotd-type)
+ (setq type (cond ((eq type t) slotd-type)
((*subtypep type slotd-type) type)
(t `(and ,type ,slotd-type)))))))
(list :name name
(defmethod compute-effective-slot-definition-initargs :around
((class structure-class) direct-slotds)
(let ((slotd (car direct-slotds)))
- (list* :defstruct-accessor-symbol (slot-definition-defstruct-accessor-symbol slotd)
- :internal-reader-function (slot-definition-internal-reader-function slotd)
- :internal-writer-function (slot-definition-internal-writer-function slotd)
+ (list* :defstruct-accessor-symbol
+ (slot-definition-defstruct-accessor-symbol slotd)
+ :internal-reader-function
+ (slot-definition-internal-reader-function slotd)
+ :internal-writer-function
+ (slot-definition-internal-writer-function slotd)
(call-next-method))))
\f
-;;; NOTE: For bootstrapping considerations, these can't use make-instance
+;;; NOTE: For bootstrapping considerations, these can't use MAKE-INSTANCE
;;; to make the method object. They have to use make-a-method which
;;; is a specially bootstrapped mechanism for making standard methods.
(defmethod reader-method-class ((class slot-class) direct-slot &rest initargs)
;;;; inform-type-system-about-class
;;;; make-type-predicate
;;;
-;;; 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.
+;;; 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))
\f
;; will already be doing what we want. In particular, we must be
;; sure we never change an OBSOLETE into a FLUSH since OBSOLETE
;; means do what FLUSH does and then some.
- (when (eq state 't) ; FIXME: should be done through INVALID-WRAPPER-P
+ (when (eq state t) ; FIXME: should be done through INVALID-WRAPPER-P
(let ((nwrapper (make-wrapper (wrapper-no-of-instance-slots owrapper)
class)))
(setf (wrapper-instance-slots-layout nwrapper)
(wrapper-instance-slots-layout owrapper))
(setf (wrapper-class-slots nwrapper)
(wrapper-class-slots owrapper))
- (without-interrupts
+ (sb-sys:without-interrupts
(update-lisp-class-layout class nwrapper)
(setf (slot-value class 'wrapper) nwrapper)
(invalidate-wrapper owrapper ':flush nwrapper))))))
(wrapper-instance-slots-layout owrapper))
(setf (wrapper-class-slots nwrapper)
(wrapper-class-slots owrapper))
- (without-interrupts
+ (sb-sys:without-interrupts
(update-lisp-class-layout class nwrapper)
(setf (slot-value class 'wrapper) nwrapper)
(invalidate-wrapper owrapper ':obsolete nwrapper)
;;; - when the instance is involved in method lookup
;;; - when attempting to access a slot of an instance
;;;
-;;; It is not called by class-of, wrapper-of, or any of the low-level instance
-;;; access macros.
+;;; It is not called by class-of, wrapper-of, or any of the low-level
+;;; instance access macros.
;;;
-;;; Of course these times when it is called are an internal implementation
-;;; detail of PCL and are not part of the documented description of when the
-;;; obsolete instance update happens. The documented description is as it
-;;; appears in 88-002R.
+;;; Of course these times when it is called are an internal
+;;; implementation detail of PCL and are not part of the documented
+;;; description of when the obsolete instance update happens. The
+;;; documented description is as it appears in 88-002R.
;;;
-;;; This has to return the new wrapper, so it counts on all the methods on
-;;; obsolete-instance-trap-internal to return the new wrapper. It also does
-;;; a little internal error checking to make sure that the traps are only
-;;; happening when they should, and that the trap methods are computing
-;;; appropriate new wrappers.
+;;; This has to return the new wrapper, so it counts on all the
+;;; methods on obsolete-instance-trap-internal to return the new
+;;; wrapper. It also does a little internal error checking to make
+;;; sure that the traps are only happening when they should, and that
+;;; the trap methods are computing appropriate new wrappers.
;;; obsolete-instance-trap might be called on structure instances
;;; after a structure is redefined. In most cases, obsolete-instance-trap
(format stream
"obsolete structure error in ~S:~@
for a structure of type: ~S"
- (sb-conditions::condition-function-name condition)
+ (sb-kernel::condition-function-name condition)
(type-of (obsolete-structure-datum condition))))))
(defun obsolete-instance-trap (owrapper nwrapper instance)
(opos (interval :from 0)))
(let ((npos (posq name nlayout)))
(if npos
- (setf (instance-ref nslots npos) (instance-ref oslots opos))
+ (setf (clos-slots-ref nslots npos)
+ (clos-slots-ref oslots opos))
(progn
(push name discarded)
- (unless (eq (instance-ref oslots opos) *slot-unbound*)
- (setf (getf plist name) (instance-ref oslots opos)))))))
+ (unless (eq (clos-slots-ref oslots opos) +slot-unbound+)
+ (setf (getf plist name) (clos-slots-ref oslots opos)))))))
;; Go through all the old shared slots.
(iterate ((oclass-slot-and-val (list-elements oclass-slots)))
(val (cdr oclass-slot-and-val)))
(let ((npos (posq name nlayout)))
(if npos
- (setf (instance-ref nslots npos) (cdr oclass-slot-and-val))
+ (setf (clos-slots-ref nslots npos) (cdr oclass-slot-and-val))
(progn (push name discarded)
- (unless (eq val *slot-unbound*)
+ (unless (eq val +slot-unbound+)
(setf (getf plist name) val)))))))
;; Go through all the new local slots to compute the added slots.
(new-position (interval :from 0)))
(let ((old-position (posq new-slot old-layout)))
(when old-position
- (setf (instance-ref new-slots new-position)
- (instance-ref old-slots old-position)))))
+ (setf (clos-slots-ref new-slots new-position)
+ (clos-slots-ref old-slots old-position)))))
;; "The values of slots specified as shared in the class CFROM and
;; as local in the class CTO are retained."
(iterate ((slot-and-val (list-elements old-class-slots)))
(let ((position (posq (car slot-and-val) new-layout)))
(when position
- (setf (instance-ref new-slots position) (cdr slot-and-val)))))
+ (setf (clos-slots-ref new-slots position) (cdr slot-and-val)))))
;; Make the copy point to the old instance's storage, and make the
;; old instance point to the new storage.
\f
(defmethod validate-superclass ((c slot-class)
(f forward-referenced-class))
- 't)
+ t)
\f
(defmethod add-dependent ((metaobject dependent-update-mixin) dependent)
(pushnew dependent (plist-value metaobject 'dependents)))