;; DEFSTRUCT-P should be true if the class is defined
;; with a metaclass STRUCTURE-CLASS, so that a DEFSTRUCT
;; is compiled for the class.
- (defstruct-p (and (eq *boot-state* 'complete)
+ (defstruct-p (and (eq **boot-state** 'complete)
(let ((mclass (find-class metaclass nil)))
(and mclass
(*subtypep
(defun canonize-defclass-options (class-name options)
(maplist (lambda (sublist)
(let ((option-name (first (pop sublist))))
- (when (member option-name sublist :key #'first)
+ (when (member option-name sublist :key #'first :test #'eq)
(error 'simple-program-error
:format-control "Multiple ~S options in DEFCLASS ~S."
:format-arguments (list option-name class-name)))))
(:default-initargs
(let (initargs arg-names)
(doplist (key val) (cdr option)
- (when (member key arg-names)
+ (when (member key arg-names :test #'eq)
(error 'simple-program-error
:format-control "~@<Duplicate initialization argument ~
name ~S in :DEFAULT-INITARGS of ~
(push `(:documentation ,(second option)) canonized-options))
(otherwise
(push `(',(car option) ',(cdr option)) canonized-options))))
+ (unless default-initargs
+ (push '(:direct-default-initargs nil) canonized-options))
(values (or metaclass 'standard-class) (nreverse canonized-options))))
(defun canonize-defclass-slots (class-name slots env)
((null head))
(unless (cdr (second head))
(setf (second head) (car (second head)))))
- (let* ((type-check-function
- (if (eq type t)
- nil
- `('type-check-function (lambda (value)
- (declare (type ,type value)
- (optimize (sb-c:store-coverage-data 0)))
- value))))
- (canon `(:name ',name :readers ',readers :writers ',writers
- :initargs ',initargs
- ,@type-check-function
- ',others)))
+ (let ((canon `(:name ',name :readers ',readers :writers ',writers
+ :initargs ',initargs ',others)))
(push (if (eq initform unsupplied)
`(list* ,@canon)
`(list* :initfunction ,(make-initfunction initform)
(slot-name-illegal "a keyword"))
((constantp name env)
(slot-name-illegal "a constant"))
- ((member name *slot-names-for-this-defclass*)
+ ((member name *slot-names-for-this-defclass* :test #'eq)
(error 'simple-program-error
:format-control "Multiple slots named ~S in DEFCLASS ~S."
:format-arguments (list name class-name))))))
(defun early-slot-definition-location (slotd)
(!bootstrap-get-slot 'standard-effective-slot-definition slotd 'location))
+(defun early-slot-definition-info (slotd)
+ (!bootstrap-get-slot 'standard-effective-slot-definition slotd 'info))
+
(defun early-accessor-method-slot-name (method)
(!bootstrap-get-slot 'standard-accessor-method method 'slot-name))