[Openmcl-devel] mop issue
Cyrus Harmon
ch-openmcl at bobobeach.com
Sat Oct 2 10:41:14 PDT 2004
My guess is that you can't just drop a class onto the cpl as that isn't
enough to make OpenMCL know that it is now one of its direct
superclasses.
I did something similar sticking the superclass onto the
:direct-superclasses in an around method in initialize-instance and
reinitialize-instance. I used the clsql MOP stuff as a guiding example
and that seemed to work pretty well.
Cyrus
On Oct 2, 2004, at 6:41 AM, marco wrote:
>
> i originally thought this was a miss understanding on my part, but
> sbcl and cmucl both deal with this code without a hitch.
>
> (in-package :common-lisp-user)
>
> (defclass kclass (standard-class)
> ())
>
> (defmethod mopp:validate-superclass ((sub kclass) (super
> standard-class))
> t)
>
> (defclass super ()
> ()
> (:metaclass kclass))
>
> (defmethod mopp:compute-class-precedence-list ((class kclass))
> (let ((cpl (call-next-method))
> (super-cpl (mopp:class-precedence-list (find-class 'super))))
> (if (member (find-class 'super) cpl)
> cpl
> (append (remove-if (lambda (class) (member class super-cpl))
> cpl)
> super-cpl))))
>
> (defclass foo ()
> ()
> (:metaclass kclass))
>
> (defclass bar (foo)
> ()
> (:metaclass kclass))
>
> when attempting to define the BAR class i get an "Inconsistent
> superclasses for #<KCLASS BAR>" error. i think the issue in in
> ccl::compute-cpl, but my understanding of the MOP (and in particular
> openmcl's implementation) is way to weak to figure out what's wrong.
>
> --
> -Marco
> Ring the bells that still can ring.
> Forget your perfect offering.
> There is a crack in everything.
> That's how the light gets in.
> -Leonard Cohen
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel
More information about the Openmcl-devel
mailing list