(in-package "SB-PCL")
\f
-(defmacro slot-symbol (slot-name type)
- `(if (and (symbolp ,slot-name) (symbol-package ,slot-name))
- (or (get ,slot-name ',(ecase type
- (reader 'reader-symbol)
- (writer 'writer-symbol)
- (boundp 'boundp-symbol)))
- (intern (format nil "~A ~A slot ~A"
- (package-name (symbol-package ,slot-name))
- (symbol-name ,slot-name)
- ,(symbol-name type))
- *slot-accessor-name-package*))
- (progn
- (error "Non-symbol and non-interned symbol slot name accessors~
- are not yet implemented.")
- ;;(make-symbol (format nil "~A ~A" ,slot-name ,type))
- )))
-
-(defun slot-reader-symbol (slot-name)
- (slot-symbol slot-name reader))
-
-(defun slot-writer-symbol (slot-name)
- (slot-symbol slot-name writer))
-
-(defun slot-boundp-symbol (slot-name)
- (slot-symbol slot-name boundp))
-
(defmacro asv-funcall (sym slot-name type &rest args)
(declare (ignore type))
`(if (fboundp ',sym)
(unless (constantp slot-name)
(error "~S requires its slot-name argument to be a constant"
'accessor-slot-boundp))
- (let* ((slot-name (eval slot-name)))
+ (let ((slot-name (eval slot-name)))
`(slot-boundp-normal ,object ',slot-name)))
-(defun structure-slot-boundp (object)
- (declare (ignore object))
- t)
-
(defun make-structure-slot-boundp-function (slotd)
- (let* ((reader (slot-definition-internal-reader-function slotd))
- (fun #'(lambda (object)
- (not (eq (funcall reader object) +slot-unbound+)))))
- (declare (type function reader))
- fun))
+ (lambda (object) (declare (ignore object)) t))
(defun get-optimized-std-accessor-method-function (class slotd name)
(if (structure-class-p class)
(defun make-optimized-std-reader-method-function (fsc-p slot-name index)
(declare #.*optimize-speed*)
- (set-function-name
+ (set-fun-name
(etypecase index
(fixnum (if fsc-p
(lambda (instance)
(defun make-optimized-std-writer-method-function (fsc-p slot-name index)
(declare #.*optimize-speed*)
- (set-function-name
+ (set-fun-name
(etypecase index
(fixnum (if fsc-p
(lambda (nv instance)
(defun make-optimized-std-boundp-method-function (fsc-p slot-name index)
(declare #.*optimize-speed*)
- (set-function-name
+ (set-fun-name
(etypecase index
(fixnum (if fsc-p
- #'(lambda (instance)
- (not (eq (clos-slots-ref (fsc-instance-slots instance)
- index)
- +slot-unbound+)))
- #'(lambda (instance)
- (not (eq (clos-slots-ref (std-instance-slots instance)
- index)
- +slot-unbound+)))))
- (cons #'(lambda (instance)
- (declare (ignore instance))
- (not (eq (cdr index) +slot-unbound+)))))
+ (lambda (instance)
+ (not (eq (clos-slots-ref (fsc-instance-slots instance)
+ index)
+ +slot-unbound+)))
+ (lambda (instance)
+ (not (eq (clos-slots-ref (std-instance-slots instance)
+ index)
+ +slot-unbound+)))))
+ (cons (lambda (instance)
+ (declare (ignore instance))
+ (not (eq (cdr index) +slot-unbound+)))))
`(boundp ,slot-name)))
(defun make-optimized-structure-slot-value-using-class-method-function (function)
(declare (type function function))
(lambda (class object slotd)
- (let ((value (funcall function object)))
- (if (eq value +slot-unbound+)
- (slot-unbound class object (slot-definition-name slotd))
- value))))
+ (declare (ignore class slotd))
+ (funcall function object)))
(defun make-optimized-structure-setf-slot-value-using-class-method-function (function)
(declare (type function function))
- #'(lambda (nv class object slotd)
- (declare (ignore class slotd))
- (funcall function nv object)))
+ (lambda (nv class object slotd)
+ (declare (ignore class slotd))
+ (funcall function nv object)))
-(defun make-optimized-structure-slot-boundp-using-class-method-function (function)
- (declare (type function function))
- #'(lambda (class object slotd)
- (declare (ignore class slotd))
- (not (eq (funcall function object) +slot-unbound+))))
+(defun make-optimized-structure-slot-boundp-using-class-method-function ()
+ (lambda (class object slotd)
+ (declare (ignore class object slotd))
+ t))
(defun get-optimized-std-slot-value-using-class-method-function (class
slotd
(slot-definition-internal-reader-function slotd)))
(writer (make-optimized-structure-setf-slot-value-using-class-method-function
(slot-definition-internal-writer-function slotd)))
- (boundp (make-optimized-structure-slot-boundp-using-class-method-function
- (slot-definition-internal-writer-function slotd))))
+ (boundp (make-optimized-structure-slot-boundp-using-class-method-function)))
(let* ((fsc-p (cond ((standard-class-p class) nil)
((funcallable-standard-class-p class) t)
(t (error "~S is not a standard-class" class))))
(defun get-accessor-from-svuc-method-function (class slotd sdfun name)
(macrolet ((emf-funcall (emf &rest args)
`(invoke-effective-method-function ,emf nil ,@args)))
- (set-function-name
+ (set-fun-name
(case name
(reader (lambda (instance)
(emf-funcall sdfun class instance slotd)))
`(,name ,(class-name class) ,(slot-definition-name slotd)))))
(defun make-internal-reader-method-function (class-name slot-name)
- (list* ':method-spec `(internal-reader-method ,class-name ,slot-name)
+ (list* :method-spec `(internal-reader-method ,class-name ,slot-name)
(make-method-function
(lambda (instance)
(let ((wrapper (get-instance-wrapper-or-nil instance)))
(instance-read-internal
.pv. instance-slots 1
(slot-value instance slot-name))))))))
- (setf (getf (getf initargs ':plist) ':slot-name-lists)
+ (setf (getf (getf initargs :plist) :slot-name-lists)
(list (list nil slot-name)))
- (setf (getf (getf initargs ':plist) ':pv-table-symbol) pv-table-symbol)
- (list* ':method-spec `(reader-method ,class-name ,slot-name)
+ (setf (getf (getf initargs :plist) :pv-table-symbol) pv-table-symbol)
+ (list* :method-spec `(reader-method ,class-name ,slot-name)
initargs)))
(defun make-std-writer-method-function (class-name slot-name)
(instance-write-internal
.pv. instance-slots 1 nv
(setf (slot-value instance slot-name) nv))))))))
- (setf (getf (getf initargs ':plist) ':slot-name-lists)
+ (setf (getf (getf initargs :plist) :slot-name-lists)
(list nil (list nil slot-name)))
- (setf (getf (getf initargs ':plist) ':pv-table-symbol) pv-table-symbol)
- (list* ':method-spec `(writer-method ,class-name ,slot-name)
+ (setf (getf (getf initargs :plist) :pv-table-symbol) pv-table-symbol)
+ (list* :method-spec `(writer-method ,class-name ,slot-name)
initargs)))
(defun make-std-boundp-method-function (class-name slot-name)
(instance-boundp-internal
.pv. instance-slots 1
(slot-boundp instance slot-name))))))))
- (setf (getf (getf initargs ':plist) ':slot-name-lists)
+ (setf (getf (getf initargs :plist) :slot-name-lists)
(list (list nil slot-name)))
- (setf (getf (getf initargs ':plist) ':pv-table-symbol) pv-table-symbol)
- (list* ':method-spec `(boundp-method ,class-name ,slot-name)
+ (setf (getf (getf initargs :plist) :pv-table-symbol) pv-table-symbol)
+ (list* :method-spec `(boundp-method ,class-name ,slot-name)
initargs)))
(defun initialize-internal-slot-gfs (slot-name &optional type)