first argument to <function>format</>).</para>
<para>&SBCL; supports a MetaObject Protocol which is intended to be
-compatible with &AMOP;; exceptions to this (as distinct from current
-bugs<!-- Such as the distinction between CL:FIND-CLASS and
-SB-PCL::FIND-CLASS :-( -->) are that
-<function>compute-effective-method</> only returns one value, not
-two<!-- FIXME: anything else? What about extensions? (e.g. COMPUTE-SLOTS
-behaviour) -->.</para>
+compatible with &AMOP;; present exceptions to this (as distinct from
+current bugs) are:
+<itemizedlist>
+ <listitem><para>the abstract <classname>metaobject</> class is not
+ present in the class hierarchy;</para></listitem>
+ <listitem><para>the <classname>standard-object</> and
+ <classname>funcallable-standard-object</> classes are
+ disjoint;</para></listitem>
+ <listitem><para><function>compute-effective-method</> only returns
+ one value, not two;</para></listitem>
+ <listitem><para>the system-supplied <property>:around</> method for
+ <function>compute-slots</> specialized on
+ <classname>funcallable-standard-class</> does not respect the
+ requested order from a user-supplied primary method.
+</itemizedlist>
</sect2>
:doc
"public: the MetaObject Protocol interface, as defined by
The Art of the Metaobject Protocol, by Kiczales, des Rivieres and Bobrow:
-ISBN 0-262-61074-4."
- :use ("SB!PCL")
+ISBN 0-262-61074-4, with exceptions as noted in the User Manual."
+ :use ("CL" "SB!PCL")
:reexport ("ADD-DEPENDENT"
"ADD-DIRECT-METHOD"
"ADD-DIRECT-SUBCLASS"
"ADD-METHOD"
"ALLOCATE-INSTANCE"
+ "BUILT-IN-CLASS"
+ "CLASS"
"CLASS-DEFAULT-INITARGS"
"CLASS-DIRECT-DEFAULT-INITARGS"
"CLASS-DIRECT-SLOTS"
"COMPUTE-EFFECTIVE-METHOD"
"COMPUTE-EFFECTIVE-SLOT-DEFINITION"
"COMPUTE-SLOTS"
+ "DIRECT-SLOT-DEFINITION"
"DIRECT-SLOT-DEFINITION-CLASS"
+ "EFFECTIVE-SLOT-DEFINITION"
"EFFECTIVE-SLOT-DEFINITION-CLASS"
"ENSURE-CLASS"
"ENSURE-CLASS-USING-CLASS"
"ENSURE-GENERIC-FUNCTION"
"ENSURE-GENERIC-FUNCTION-USING-CLASS"
+ "EQL-SPECIALIZER"
"EQL-SPECIALIZER-OBJECT"
"EXTRACT-LAMBDA-LIST"
"EXTRACT-SPECIALIZER-NAMES"
"FINALIZE-INHERITANCE"
"FIND-METHOD-COMBINATION"
+ "FORWARD-REFERENCED-CLASS"
+ "FUNCALLABLE-STANDARD-CLASS"
"FUNCALLABLE-STANDARD-INSTANCE-ACCESS"
+ "FUNCALLABLE-STANDARD-OBJECT"
+ "FUNCTION"
+ "GENERIC-FUNCTION"
"GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER"
"GENERIC-FUNCTION-DECLARATIONS"
"GENERIC-FUNCTION-LAMBDA-LIST"
"MAKE-METHOD-LAMBDA"
"MAKE-INSTANCE"
"MAP-DEPENDENTS"
+ ;; KLUDGE: See the User Manual
+ ;; "METAOBJECT"
+ "METHOD"
+ "METHOD-COMBINATION"
"METHOD-FUNCTION"
"METHOD-GENERIC-FUNCTION"
"METHOD-LAMBDA-LIST"
"REMOVE-METHOD"
"SET-FUNCALLABLE-INSTANCE-FUNCTION"
"SLOT-BOUNDP-USING-CLASS"
+ "SLOT-DEFINITION"
"SLOT-DEFINITION-ALLOCATION"
"SLOT-DEFINITION-INITARGS"
"SLOT-DEFINITION-INITFORM"
"SLOT-DEFINITION-TYPE"
"SLOT-MAKUNBOUND-USING-CLASS"
"SLOT-VALUE-USING-CLASS"
+ "SPECIALIZER"
"SPECIALIZER-DIRECT-GENERIC-FUNCTIONS"
"SPECIALIZER-DIRECT-METHODS"
+ "STANDARD-ACCESSOR-METHOD"
+ "STANDARD-CLASS"
+ "STANDARD-DIRECT-SLOT-DEFINITION"
+ "STANDARD-EFFECTIVE-SLOT-DEFINITION"
+ "STANDARD-GENERIC-FUNCTION"
"STANDARD-INSTANCE-ACCESS"
+ "STANDARD-METHOD"
+ "STANDARD-OBJECT"
+ "STANDARD-READER-METHOD"
+ "STANDARD-SLOT-DEFINITION"
+ "STANDARD-WRITER-METHOD"
+ "T"
"UPDATE-DEPENDENT"
"VALIDATE-SUPERCLASS"
"WRITER-METHOD-CLASS"))
later versions of SBCL, and the other stuff in here is
definitely not guaranteed to be present in later versions of SBCL."
:use ("CL" "SB!INT" "SB!EXT" "SB!WALKER" "SB!KERNEL")
+ ;; FIXME: After a little while, these reexports can probably go
+ ;; away, as they're superseded by the use of SB-MOP as the
+ ;; publically-accessible package.
:reexport ("ADD-METHOD" "ALLOCATE-INSTANCE"
"CLASS-NAME" "COMPUTE-APPLICABLE-METHODS"
"ENSURE-GENERIC-FUNCTION" "MAKE-INSTANCE"
"COMPUTE-EFFECTIVE-METHOD"
"COMPUTE-EFFECTIVE-SLOT-DEFINITION"
"COMPUTE-SLOTS"
+ "DIRECT-SLOT-DEFINITION"
"DIRECT-SLOT-DEFINITION-CLASS"
+ "EFFECTIVE-SLOT-DEFINITION"
"EFFECTIVE-SLOT-DEFINITION-CLASS"
"ENSURE-CLASS"
"ENSURE-CLASS-USING-CLASS"
"ENSURE-GENERIC-FUNCTION-USING-CLASS"
+ "EQL-SPECIALIZER"
"EQL-SPECIALIZER-OBJECT"
"EXTRACT-LAMBDA-LIST"
"EXTRACT-SPECIALIZER-NAMES"
"FINALIZE-INHERITANCE"
"FIND-METHOD-COMBINATION"
+ "FORWARD-REFERENCED-CLASS"
+ "FUNCALLABLE-STANDARD-CLASS"
"FUNCALLABLE-STANDARD-INSTANCE-ACCESS"
+ "FUNCALLABLE-STANDARD-OBJECT"
"GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER"
"GENERIC-FUNCTION-DECLARATIONS"
"GENERIC-FUNCTION-LAMBDA-LIST"
"REMOVE-DIRECT-SUBCLASS"
"SET-FUNCALLABLE-INSTANCE-FUNCTION"
"SLOT-BOUNDP-USING-CLASS"
+ "SLOT-DEFINITION"
"SLOT-DEFINITION-ALLOCATION"
"SLOT-DEFINITION-INITARGS"
"SLOT-DEFINITION-INITFORM"
"SLOT-DEFINITION-TYPE"
"SLOT-MAKUNBOUND-USING-CLASS"
"SLOT-VALUE-USING-CLASS"
+ "SPECIALIZER"
"SPECIALIZER-DIRECT-GENERIC-FUNCTIONS"
"SPECIALIZER-DIRECT-METHODS"
+ "STANDARD-ACCESSOR-METHOD"
+ "STANDARD-DIRECT-SLOT-DEFINITION"
+ "STANDARD-EFFECTIVE-SLOT-DEFINITION"
"STANDARD-INSTANCE-ACCESS"
+ "STANDARD-READER-METHOD"
+ "STANDARD-SLOT-DEFINITION"
+ "STANDARD-WRITER-METHOD"
"UPDATE-DEPENDENT"
"VALIDATE-SUPERCLASS"
"WRITER-METHOD-CLASS"))
;;; that it is at least possible to define classes with that as a
;;; metaclass.
(defclass gf-class (standard-generic-function) ()
- (:metaclass sb-pcl::funcallable-standard-class))
+ (:metaclass funcallable-standard-class))
(defgeneric g (a b c)
(:generic-function-class gf-class))
\f
;;; of all built-in-classes is of the relevant type)
(assert (null (class-prototype (find-class 'null))))
\f
-;;; simple consistency checks for the SB-PCL (perhaps AKA SB-MOP)
-;;; package: all of the functionality specified in AMOP is in
-;;; functions:
-(assert (null (loop for x being each external-symbol in "SB-PCL"
- unless (fboundp x) collect x)))
-;;; and all generic functions in SB-PCL have at least one specified
+;;; simple consistency checks for the SB-MOP package: all of the
+;;; functionality specified in AMOP is in functions and classes:
+(assert (null (loop for x being each external-symbol in "SB-MOP"
+ unless (or (fboundp x) (find-class x)) collect x)))
+;;; and all generic functions in SB-MOP have at least one specified
;;; method, except for UPDATE-DEPENDENT
-(assert (null (loop for x being each external-symbol in "SB-PCL"
- unless (or (eq x 'update-dependent)
+(assert (null (loop for x being each external-symbol in "SB-MOP"
+ unless (or (not (fboundp x))
+ (eq x 'update-dependent)
(not (typep (fdefinition x) 'generic-function))
(> (length (generic-function-methods
(fdefinition x)))