X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fdefs.lisp;h=dbed28c0a279ea95d93061c737c1329629dae5aa;hb=72db452798256d266d5909bd330d9eb5b31c6f1e;hp=d8ac2ec2980dbb0590174b5e3294f3bd631ee50d;hpb=9eec6e12fb6d22101631158dc1012276fd00facc;p=sbcl.git diff --git a/src/pcl/defs.lisp b/src/pcl/defs.lisp index d8ac2ec..dbed28c 100644 --- a/src/pcl/defs.lisp +++ b/src/pcl/defs.lisp @@ -200,13 +200,8 @@ (defun variable-class (var env) (caddr (var-declaration 'class var env))) -(defvar *name->class->slotd-table* (make-hash-table)) - (defvar *standard-method-combination*) -(defun make-class-predicate-name (name) - (list 'class-predicate name)) - (defun plist-value (object name) (getf (object-plist object) name)) @@ -319,9 +314,7 @@ definition-source-mixin metaobject funcallable-standard-object) - ((documentation - :initform nil - :initarg :documentation) + ((%documentation :initform nil :initarg :documentation) ;; We need to make a distinction between the methods initially set ;; up by :METHOD options to DEFGENERIC and the ones set up later by ;; DEFMETHOD, because ANSI specifies that executing DEFGENERIC on @@ -333,9 +326,8 @@ ;; DEFMETHOD, then modifying and reloading a.lisp and/or b.lisp ;; tends to leave the generic function in a state consistent with ;; the most-recently-loaded state of a.lisp and b.lisp.) - (initial-methods - :initform () - :accessor generic-function-initial-methods)) + (initial-methods :initform () + :accessor generic-function-initial-methods)) (:metaclass funcallable-standard-class)) (defclass standard-generic-function (generic-function) @@ -350,7 +342,7 @@ (method-class :initarg :method-class :accessor generic-function-method-class) - (method-combination + (%method-combination :initarg :method-combination :accessor generic-function-method-combination) (declarations @@ -374,13 +366,14 @@ (defclass method (metaobject) ()) (defclass standard-method (definition-source-mixin plist-mixin method) - ((generic-function + ((%generic-function :initform nil :accessor method-generic-function) -;;; (qualifiers -;;; :initform () -;;; :initarg :qualifiers -;;; :reader method-qualifiers) + #+nil ; implemented by PLIST + (qualifiers + :initform () + :initarg :qualifiers + :reader method-qualifiers) (specializers :initform () :initarg :specializers @@ -389,24 +382,18 @@ :initform () :initarg :lambda-list :reader method-lambda-list) - (function - :initform nil - :initarg :function) ;no writer + (%function :initform nil :initarg :function) (fast-function :initform nil :initarg :fast-function ;no writer :reader method-fast-function) - (documentation - :initform nil - :initarg :documentation))) + (%documentation :initform nil :initarg :documentation))) (defclass standard-accessor-method (standard-method) - ((slot-name :initform nil - :initarg :slot-name + ((slot-name :initform nil :initarg :slot-name :reader accessor-method-slot-name) - (slot-definition :initform nil - :initarg :slot-definition - :reader accessor-method-slot-definition))) + (%slot-definition :initform nil :initarg :slot-definition + :reader accessor-method-slot-definition))) (defclass standard-reader-method (standard-accessor-method) ()) (defclass standard-writer-method (standard-accessor-method) ()) @@ -414,16 +401,13 @@ (defclass standard-boundp-method (standard-accessor-method) ()) (defclass method-combination (metaobject) - ((documentation - :reader method-combination-documentation - :initform nil - :initarg :documentation))) + ((%documentation :initform nil :initarg :documentation))) (defclass standard-method-combination (definition-source-mixin method-combination) - ((type - :reader method-combination-type - :initarg :type) + ((type-name + :reader method-combination-type-name + :initarg :type-name) (options :reader method-combination-options :initarg :options))) @@ -436,6 +420,14 @@ :initarg :args-lambda-list :reader long-method-combination-args-lambda-list))) +(defclass short-method-combination (standard-method-combination) + ((operator + :reader short-combination-operator + :initarg :operator) + (identity-with-one-argument + :reader short-combination-identity-with-one-argument + :initarg :identity-with-one-argument))) + (defclass slot-definition (metaobject) ((name :initform nil @@ -461,19 +453,13 @@ :initform nil :initarg :initargs :accessor slot-definition-initargs) - (type - :initform t - :initarg :type - :accessor slot-definition-type) - (documentation - :initform nil - :initarg :documentation - ;; FIXME: should we export this, as an extension? - :accessor %slot-definition-documentation) - (class - :initform nil - :initarg :class - :accessor slot-definition-class))) + (%type :initform t :initarg :type :accessor slot-definition-type) + (%documentation + :initform nil :initarg :documentation + ;; KLUDGE: we need a reader for bootstrapping purposes, in + ;; COMPUTE-EFFECTIVE-SLOT-DEFINITION-INITARGS. + :reader %slot-definition-documentation) + (%class :initform nil :initarg :class :accessor slot-definition-class))) (defclass standard-slot-definition (slot-definition) ((allocation @@ -549,7 +535,15 @@ ()) (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 and + ;; responses in comp.lang.lisp). -- CSR, 2006-02-27 + ((%type :initform nil :reader specializer-type))) (defclass specializer-with-object (specializer) ()) @@ -598,10 +592,7 @@ :reader class-direct-subclasses) (direct-methods :initform (cons nil nil)) - (predicate-name - :initform nil - :reader class-predicate-name) - (documentation + (%documentation :initform nil :initarg :documentation) (finalized-p @@ -621,7 +612,7 @@ ;;; The class PCL-CLASS is an implementation-specific common ;;; superclass of all specified subclasses of the class CLASS. (defclass pcl-class (class) - ((class-precedence-list + ((%class-precedence-list :reader class-precedence-list) ;; KLUDGE: see note in CPL-OR-NIL (cpl-available-p @@ -710,5 +701,5 @@ (generic-function generic-function-p) (standard-generic-function standard-generic-function-p) (method-combination method-combination-p) - (long-method-combination long-method-combination-p))) - + (long-method-combination long-method-combination-p) + (short-method-combination short-method-combination-p)))