<div><div>The following list is based on a similar one in closer-to-mop, explaining the problems in ECL which are solved by that library. It clarifies the status of MOP-compliance as of today -- very few things remain to be fixed, but a lot of testing is still required.</div>
<div><br></div><div>Fixed in git/CVS</div><ul><li>The functions ADD-DIRECT-METHOD and REMOVE-DIRECT-METHOD don't exist, and thus are also not called.</li><li>ADD-METHOD doesn't call FIND-METHOD or REMOVE-METHOD to remove potentially replaced methods, but uses some internal implementation instead.</li>
<li>SPECIALIZER-DIRECT-GENERIC-FUNCTIONS and SPECIALIZER-DIRECT-METHODS don't exist, and thus are also not updated by ADD-METHOD and REMOVE-METHOD.</li><li>VALIDATE-SUPERCLASS doesn't exist, and thus isn't called to determine whether two classes in a direct superclass relationship have compatible metaclasses.</li>
<li>COMPUTE-APPLICABLE-METHODS and COMPUTE-EFFECTIVE-METHOD are not generic functions.</li><li>COMPUTE-APPLICABLE-METHODS-USING-CLASSES doesn't exist.</li><li>DEFMETHOD doesn't call GENERIC-FUNCTION-METHOD-CLASS or MAKE-METHOD-LAMBDA.</li>
<li>The dependent protocols for classes and generic functions are not implemented.</li><li>EQL-SPECIALIZER, EQL-SPECIALIZER-OBJECT and INTERN-EQL-SPECIALIZER don't exist. In ECL, eql specializers are lists not objects. I have provided EQL-SPECIALIZER as a type (not as a class) and EQL-SPECIALIZER-OBJECT and INTERN-EQL-SPECIALIZER to work on lists, and a class EQL-SPECIALIZER* and corresponding EQL-SPECIALIZER-OBJECT* and INTERN-EQL-SPECILAIZER* to soften the incompatibilities.</li>
<li>EXTRACT-LAMBDA-LIST and EXTRACT-SPECIALIZER-NAMES don't exist.</li><li>FIND-METHOD and REMOVE-METHOD are not generic functions.</li><li>The function invocation protocol doesn't call COMPUTE-APPLICABLE-METHODS, COMPUTE-APPLICABLE-METHODS-USING-CLASSES, and COMPUTE-EFFECTIVE-METHOD.</li>
<li>GENERIC-FUNCTION-DECLARATIONS doesn't exist.</li><li>Generic functions cannot be empty when called.</li><li>MAKE-METHOD-LAMBDA doesn't exist.</li><li>The class METAOBJECT doesn't exist.</li><li>The class SPECIALIZER doesn't exist.</li>
<li>Method functions don't take parameters as specified in AMOP, but instead just the parameters that the generic function receives.</li><li>Method metaobjects are not initialized with :DOCUMENTATION.</li><li>(SETF CLASS-NAME) and (SETF GENERIC-FUNCTION-NAME) are not implemented by way of calling REINITIALIZE-INSTANCE.</li>
</ul></div><div>To be fixed</div><div><ul><li>ADD-METHOD, REMOVE-METHOD, INITIALIZE-INSTANCE and REINITIALIZE-INSTANCE do not determine a new discriminating function.</li><li>Class initialization doesn't call READER-METHOD-CLASS and WRITER-METHOD-CLASS for accessor methods. However, ECL merely delays invocation of those two functions until a class is finalized, so this shouldn't be a problem in practice.</li>
<li>Class reinitialization does not remove direct subclasses that should be removed.</li><li>COMPUTE-EFFECTIVE-METHOD returns a function object, not an effective method form.</li><li>DEFGENERIC does not call FIND-METHOD-COMBINATION.</li>
<li>FIND-METHOD-COMBINATION doesn't exist.</li><li>GENERIC-FUNCTION-METHOD-CLASS is not a generic function.</li><li>Multiple slot options are not passed as lists to DIRECT-SLOT-DEFINITION-CLASS.</li><li>The automatically created accessor methods in DEFCLASS forms don't call SLOT-VALUE-USING-CLASS and (SETF SLOT-VALUE-USING-CLASS).</li>
<li>Subclasses of BUILT-IN-CLASS, CLASS, DIRECT-SLOT-DEFINITION, EFFECTIVE-SLOT-DEFINITION, FORWARD-REFERENCED-CLASS, FUNCALLABLE-STANDARD-CLASS, SLOT-DEFINITION, STANDARD-ACCESSOR-METHOD, STANDARD-CLASS, STANDARD-DIRECT-SLOT-DEFINITION, STANDARD-EFFECTIVE-SLOT-DEFINITION, STANDARD-GENERIC-FUNCTION, STANDARD-METHOD, STANDARD-READER-METHOD, STANDARD-SLOT-DEFINITION, and STANDARD-WRITER-METHOD will inherit slots whose names are exported symbols and/or accessible in the package common-lisp-user.</li>
</ul></div>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com" target="_blank">http://juanjose.garciaripoll.googlepages.com</a><br>