From: Paul F. D. <di...@dl...> - 2003-06-13 11:31:01
|
I'm trying to test some things in CLOS that appear to require user-defined metaclasses in order to do (the problem is 11.1.2.1.2 bullet 19, which prevents methods on things like MAKE-INSTANCE from being defined on classes with standard metaclasses.) A metaclass is defined to be a class whose elements are classes, so if STANDARD-CLASS is a STANDARD-CLASS then this definition should give a metaclass: (defclass substandard-class (standard-class) ()) However, when I try to use this as a metaclass, I get an error in cmucl (and sbcl): * (defclass make-instance-class-02 () (a b c) (:metaclass substandard-class)) Error in function "DEFMETHOD SHARED-INITIALIZE :AFTER (STD-CLASS T)": The class #<STANDARD-CLASS STANDARD-OBJECT {28166925}> was specified as a super-class of the class #<SUBSTANDARD-CLASS MAKE-INSTANCE-CLASS-02 {489456B5}>, but the meta-classes #<STANDARD-CLASS STANDARD-CLASS {28163F85}> and #<STANDARD-CLASS SUBSTANDARD-CLASS {48016DA5}> are incompatible. Define a method for PCL:VALIDATE-SUPERCLASS to avoid this error. [Condition of type SIMPLE-ERROR] Restarts: 0: [ABORT] Return to Top-Level. Debug (type H for help) ("DEFMETHOD SHARED-INITIALIZE :AFTER (STD-CLASS T)" (#(15 5 8) . #()) #<unused-arg> #<SUBSTANDARD-CLASS MAKE-INSTANCE-CLASS-02 {489456B5}> #<unused-arg> ...) Source: Error finding source: Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no longer exists: target:pcl/std-class.lisp. 0] I'm willing to just give up here, since the standard does say that :metaclass is for future extensions, but that would mean deleting many of the clos tests that involve extending these builtin generic functions on classes. Paul |