(defun variable-class (var env)
(caddr (var-declaration 'class var env)))
-(defvar *name->class->slotd-table* (make-hash-table))
-
(defvar *standard-method-combination*)
\f
(defun plist-value (object name)
(defclass standard-object (slot-object) ())
-(defclass funcallable-standard-object (standard-object function)
+(defclass funcallable-standard-object (function standard-object)
()
(:metaclass funcallable-standard-class))
(defclass method (metaobject) ())
-(defclass standard-method (definition-source-mixin plist-mixin method)
+(defclass standard-method (plist-mixin definition-source-mixin method)
((%generic-function
:initform nil
:accessor method-generic-function)
- #+nil ; implemented by PLIST
(qualifiers
:initform ()
:initarg :qualifiers
:initform ()
:initarg :lambda-list
:reader method-lambda-list)
- (%function :initform nil :initarg :function)
- (fast-function
- :initform nil
- :initarg :fast-function ;no writer
- :reader method-fast-function)
+ (%function :initform nil :initarg :function :reader method-function)
(%documentation :initform nil :initarg :documentation)))
-(defclass standard-accessor-method (standard-method)
+(defclass accessor-method (standard-method)
((slot-name :initform nil :initarg :slot-name
- :reader accessor-method-slot-name)
- (%slot-definition :initform nil :initarg :slot-definition
+ :reader accessor-method-slot-name)))
+
+(defclass standard-accessor-method (accessor-method)
+ ((%slot-definition :initform nil :initarg :slot-definition
:reader accessor-method-slot-definition)))
(defclass standard-reader-method (standard-accessor-method) ())
;;; an extension, apparently.
(defclass standard-boundp-method (standard-accessor-method) ())
+;;; for (SLOT-VALUE X 'FOO) / ACCESSOR-SLOT-VALUE optimization, which
+;;; can't be STANDARD-READER-METHOD because there is no associated
+;;; slot definition.
+(defclass global-reader-method (accessor-method) ())
+(defclass global-writer-method (accessor-method) ())
+(defclass global-boundp-method (accessor-method) ())
+
(defclass method-combination (metaobject)
((%documentation :initform nil :initarg :documentation)))
:initarg :initargs
:accessor slot-definition-initargs)
(%type :initform t :initarg :type :accessor slot-definition-type)
- (%documentation
+ (%documentation
:initform nil :initarg :documentation
;; KLUDGE: we need a reader for bootstrapping purposes, in
;; COMPUTE-EFFECTIVE-SLOT-DEFINITION-INITARGS.
())
(defclass specializer (metaobject)
- ((type :initform nil :reader specializer-type)))
+ ;; KLUDGE: in sbcl-0.9.10.2 this was renamed from TYPE, which was an
+ ;; external symbol of the CL package and hence potentially collides
+ ;; with user code. Renaming this to %TYPE, however, is the coward's
+ ;; way out, because the objects that PCL puts in this slot aren't
+ ;; (quite) types: they are closer to kinds of specializer. However,
+ ;; the wholesale renaming and disentangling of specializers didn't
+ ;; appeal. (See also message <sqd5hrclb2.fsf@cam.ac.uk> and
+ ;; responses in comp.lang.lisp). -- CSR, 2006-02-27
+ ((%type :initform nil :reader specializer-type)))
(defclass specializer-with-object (specializer) ())
:initarg :definition-source)))
(defclass plist-mixin (standard-object)
- ((plist :initform () :accessor object-plist)))
+ ((plist :initform () :accessor object-plist :initarg plist)))
(defclass dependent-update-mixin (plist-mixin) ())
(forward-referenced-class forward-referenced-class-p)
(method method-p)
(standard-method standard-method-p)
+ (accessor-method accessor-method-p)
(standard-accessor-method standard-accessor-method-p)
(standard-reader-method standard-reader-method-p)
(standard-writer-method standard-writer-method-p)
(standard-boundp-method standard-boundp-method-p)
+ (global-reader-method global-reader-method-p)
+ (global-writer-method global-writer-method-p)
+ (global-boundp-method global-boundp-method-p)
(generic-function generic-function-p)
(standard-generic-function standard-generic-function-p)
(method-combination method-combination-p)