Scott,
you can achieve the precedence you are wanting by adding multiple superclasses to Derived. In the forthcoming version (which will be named 1.5), you can even use "superclass add" like in the following example.
Class create Base Class create Derived -superclass Base Derived d puts [d info precedence] ;# ==> ::Derived ::Base ::xotcl::Object
Class create BaseMixin Derived superclass add BaseMixin puts [d info precedence] ;# ==> ::Derived ::BaseMixin ::Base ::xotcl::Object
the new release is already passing the regression test. i will do some more test with the aolserver+OpenAce and make it available rsn.
best regards -gustaf
Scott Gargash schrieb:
Class create Base Class create Derived -superclass Base Derived d d info precedence ==> ::Derived ::Base ::xotcl::Object
Class create BaseMixin Base instmixin add BaseMixin d info precedence ==> ::BaseMixin ::Derived ::Base ::xotcl::Object
This behavior seems to violate encapsulation. BaseMixin is intended to intercept messages to Base. Derived doesn't know about BaseMixin and BaseMixin doesn't know about Derived, yet BaseMixin ends up being the first interceptor of messages to Derived.
Since BaseMixin is intended to modify the behavior of Base, it would be better BaseMixin preceeded Base (and only Base) in the sort order.
d info precedence ==> ::Derived ::BaseMixin ::Base ::xotcl::Object