Index: TODO =================================================================== diff -u -r2a3ac3f00afd5c5cfdfb1a9fff667cdec5b861be -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- TODO (.../TODO) (revision 2a3ac3f00afd5c5cfdfb1a9fff667cdec5b861be) +++ TODO (.../TODO) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -5462,18 +5462,53 @@ - make all __* system methods in nx redefine-protected - let "nsf::configure objectsystem" return handles and protections as well +nx.tcl: pluralism reform part 3 +- introduced simple plural form "mixins" and "filters" for introspection +- moved differentiated interface into slot methods. + the slot methods "get" stay symmetrically to "set", + but additional methods "classes" or "methods" are used + like "guard" to obtain partial results of the + mixin and filter specs +- changed info methods + /cls/ info mixin classes -> /cls/ info mixins + /cls/ info filter methods -> /cls/ info filters + /obj/ info object mixin classes -> /obj/ info object mixins + /obj/ info object filter methods -> /obj/ info object filters +- dropped + /cls/ info mixin guard + /cls/ info filter guard + /obj/ info object mixin guard + /obj/ info object filter guard +- added + /cls/ mixin classes + /cls/ filter methods + /obj/ object filter methods + /obj/ object mixin classes + ======================================================================== TODO: +- EnsembleObject->unknown is still not correct + "C info object mixin classes" complains about "object" + and not about "mixin". + The message for "C info mixin classes" is fine + - finish pluaral reform - update migration guide and tutorial - maybe introdouce "allowabbrev" flag - set nodashalnum for int types - should we change "/obj/ info lookup syntax /methodName/" to return obj and method as well? (similar to "info method syntax /methodName/") + - we could drop methods::object::info::objectparameter +- do we need: ::nsf::methods::object::info::is ? objectInfoMethod is NsfObjInfoIsMethod +- we should rename ::nsf::methods::class::info::filtermethods to ::nsf::methods::class::info::filters +- we should rename ::nsf::methods::class::info::mixinclasses to ::nsf::methods::class::info::mixins +- can we drop ::nsf::methods::class::info::filterguards ? +- can we drop ::nsf::methods::class::info::mixinguards ? + - remove // comments - what should happen with: "/class/ info mixin classes -heritage" Index: library/mongodb/nx-mongo.tcl =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- library/mongodb/nx-mongo.tcl (.../nx-mongo.tcl) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ library/mongodb/nx-mongo.tcl (.../nx-mongo.tcl) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -417,7 +417,7 @@ # (eg. mongo type, or mongo operator). # :method "get slot" {att} { - set classes [concat [self] [:info mixin classes] [:info heritage]] + set classes [concat [self] [:info mixins] [:info heritage]] foreach cls $classes { set slot [$cls info slots $att] if {$slot ne ""} { Index: library/nx/class-method.tcl =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- library/nx/class-method.tcl (.../class-method.tcl) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ library/nx/class-method.tcl (.../class-method.tcl) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -89,8 +89,7 @@ # foreach m { method methods slots variables - "filter guards" "filter methods" - "mixin guards" "mixin classes" + filters mixins } { :public method "class info $m" {args} [subst -nocommands { nx::configure class-method-warning Index: library/nx/nx.tcl =================================================================== diff -u -r2a3ac3f00afd5c5cfdfb1a9fff667cdec5b861be -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- library/nx/nx.tcl (.../nx.tcl) (revision 2a3ac3f00afd5c5cfdfb1a9fff667cdec5b861be) +++ library/nx/nx.tcl (.../nx.tcl) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -473,6 +473,7 @@ set path [lrange $callInfo 1 end-1] set m [lindex $callInfo end] set obj [lindex $callInfo 0] + #puts stderr "CI=<$callInfo> args <$args>" #puts stderr "### [list $obj ::nsf::methods::object::info::lookupmethods -path \"$path *\"]" if {[catch {set valid [$obj ::nsf::methods::object::info::lookupmethods -path "$path *"]} errorMsg]} { set valid "" @@ -737,13 +738,11 @@ :alias "info has mixin" ::nsf::methods::object::info::hasmixin :alias "info has namespace" ::nsf::methods::object::info::hasnamespace :alias "info has type" ::nsf::methods::object::info::hastype - #:alias "info is" ::nsf::methods::object::info::is + #:alias "info is" ::nsf::methods::object::info::is :alias "info name" ::nsf::methods::object::info::name - :alias "info object filter guard" ::nsf::methods::object::info::filterguard - :alias "info object filter methods" ::nsf::methods::object::info::filtermethods - :alias "info object methods" ::nsf::methods::object::info::methods - :alias "info object mixin guard" ::nsf::methods::object::info::mixinguard - :alias "info object mixin classes" ::nsf::methods::object::info::mixinclasses + :alias "info object filters" ::nsf::methods::object::info::filtermethods + :alias "info object methods" ::nsf::methods::object::info::methods + :alias "info object mixins" ::nsf::methods::object::info::mixinclasses :method "info object slots" {{-type:class ::nx::Slot} pattern:optional} { set method [list ::nsf::methods::object::info::slotobjects -type $type] if {[info exists pattern]} {lappend method $pattern} @@ -815,14 +814,12 @@ Class eval { :alias "info lookup" ::nx::Object::slot::__info::lookup - :alias "info filter guard" ::nsf::methods::class::info::filterguard - :alias "info filter methods" ::nsf::methods::class::info::filtermethods + :alias "info filters" ::nsf::methods::class::info::filtermethods :alias "info has" ::nx::Object::slot::__info::has :alias "info heritage" ::nsf::methods::class::info::heritage :alias "info instances" ::nsf::methods::class::info::instances :alias "info methods" ::nsf::methods::class::info::methods - :alias "info mixin guard" ::nsf::methods::class::info::mixinguard - :alias "info mixin classes" ::nsf::methods::class::info::mixinclasses + :alias "info mixins" ::nsf::methods::class::info::mixinclasses :alias "info mixinof" ::nsf::methods::class::info::mixinof :method "info slots" {{-type ::nx::Slot} -closure:switch -source:optional pattern:optional} { @@ -1672,34 +1669,74 @@ ::nsf::parameter::cache::classinvalidate ::nx::ObjectParameterSlot # - # Define method "guard" for mixin- and filter-slots of Object and Class + # Define method "guard" and "methods" for object filters # ::nx::Object::slot::object-filters object method value=guard {obj prop filter guard:optional} { if {[info exists guard]} { ::nsf::directdispatch $obj ::nsf::methods::object::filterguard $filter $guard } else { - $obj info object filter guard $filter + lindex [$obj info object filters -guards $filter] 0 2 } } + ::nx::Object::slot::object-filters object method value=methods {obj prop pattern:optional} { + if {[info exists pattern]} { + $obj info object filters $pattern + } else { + $obj info object filters + } + } + + # + # Define method "guard" and "methods" for filters + # ::nx::Class::slot::filters object method value=guard {obj prop filter guard:optional} { if {[info exists guard]} { ::nsf::directdispatch $obj ::nsf::methods::class::filterguard $filter $guard } else { - $obj info filter guard $filter + lindex [$obj info filters -guards $filter] 0 2 } } + ::nx::Class::slot::filters object method value=methods {obj prop pattern:optional} { + if {[info exists pattern]} { + $obj info filters $pattern + } else { + $obj info filters + } + } + + # + # object mixins + # + ::nx::Object::slot::object-mixins object method value=classes {obj prop pattern:optional} { + if {[info exists pattern]} { + $obj info object mixins $pattern + } else { + $obj info object mixins + } + } ::nx::Object::slot::object-mixins object method value=guard {obj prop mixin guard:optional} { if {[info exists guard]} { ::nsf::directdispatch $obj ::nsf::methods::object::mixinguard $mixin $guard } else { - $obj info object mixin guard $mixin + lindex [$obj info object mixins -guards $mixin] 0 2 } } + + # + # mixins + # + ::nx::Class::slot::mixins object method value=classes {obj prop pattern:optional} { + if {[info exists pattern]} { + $obj info mixins $pattern + } else { + $obj info mixins + } + } ::nx::Class::slot::mixins object method value=guard {obj prop filter guard:optional} { if {[info exists guard]} { ::nsf::directdispatch $obj ::nsf::methods::class::mixinguard $filter $guard } else { - $obj info mixin guard $filter + lindex [$obj info mixins -guards $mixin] 0 2 } } #::nsf::method::alias ::nx::Class::slot::object-filters guard ::nx::Object::slot::object-filters::guard Index: library/nx/plain-object-method.tcl =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- library/nx/plain-object-method.tcl (.../plain-object-method.tcl) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ library/nx/plain-object-method.tcl (.../plain-object-method.tcl) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -78,8 +78,7 @@ # foreach m { method methods slots variables - "filter guards" "filter methods" - "mixin guards" "mixin classes" + filters mixins } { :public method "info $m" {args} [subst -nocommands { nx::configure plain-object-method-warning Index: tests/class-method.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/class-method.test (.../class-method.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/class-method.test (.../class-method.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -17,7 +17,7 @@ ? {lsort [::C info object methods]} "f" ? {lsort [::C info]} \ - "valid submethods of ::C info: children class filter has heritage info instances lookup method methods mixin mixinof name object parent precedence slots subclasses superclasses variable variables vars" + "valid submethods of ::C info: children class filters has heritage info instances lookup method methods mixinof mixins name object parent precedence slots subclasses superclasses variable variables vars" } # @@ -65,18 +65,18 @@ ? {::C fwd} "pm1" ? {::C class mixins set M1} ::M1 - ? {::C class info mixin classes} ::M1 + ? {::C class info mixins} ::M1 ? {::C class mixins set ""} "" - ? {::C class info mixin classes} "" + ? {::C class info mixins} "" ? {::C class filters set f} f - ? {::C class info filter methods} f + ? {::C class info filters} f ? {::C class filters set ""} "" - ? {::C class info filter methods} "" + ? {::C class info filters} "" ? {lsort [::C info object methods]} "a f foo fwd p v2" ? {lsort [::C info]} \ - "valid submethods of ::C info: children class filter has heritage info instances lookup method methods mixin mixinof name object parent precedence slots subclasses superclasses variable variables vars" + "valid submethods of ::C info: children class filters has heritage info instances lookup method methods mixinof mixins name object parent precedence slots subclasses superclasses variable variables vars" } # Index: tests/info-method.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/info-method.test (.../info-method.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/info-method.test (.../info-method.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -391,62 +391,61 @@ ? {o info lookup method configure} "::nsf::classes::nx::Object::configure" ? {o object filters set f} "f" ? {o object filters guard f { 1 == 1 }} "" - ? {o info object filter guard f} " 1 == 1 " + ? {o info object filters -guards} {{f -guard { 1 == 1 }}} ? {o object filters guard f} " 1 == 1 " o object filters set "" nx::Class create Foo ? {Foo method f args ::nx::next} "::nsf::classes::Foo::f" ? {Foo method f2 args ::nx::next} "::nsf::classes::Foo::f2" ? {Foo filters set {f f2}} "f f2" - ? {Foo info filter methods} "f f2" + ? {Foo info filters} "f f2" ? {Foo filters guard f {2 == 2}} "" - ? {Foo info filter guard f} "2 == 2" - ? {Foo info filter methods -guards f} "{f -guard {2 == 2}}" - ? {Foo info filter methods -guards f2} "f2" - ? {Foo info filter methods -guards} "{f -guard {2 == 2}} f2" + ? {Foo info filters -guards f} "{f -guard {2 == 2}}" + ? {Foo info filters -guards f2} "f2" + ? {Foo info filters -guards} "{f -guard {2 == 2}} f2" ? {Foo filters set {}} "" ? {Foo object method f args ::nx::next} "::Foo::f" ? {Foo object method f2 args ::nx::next} "::Foo::f2" ? {Foo object filters set {f f2}} "f f2" - ? {Foo info object filter methods} "f f2" + ? {Foo info object filters} "f f2" ? {Foo object filters guard f {2 == 2}} "" - ? {Foo info object filter guard f} "2 == 2" - ? {Foo info object filter methods -guards f} "{f -guard {2 == 2}}" - ? {Foo info object filter methods -guards f2} "f2" - ? {Foo info object filter methods -guards} "{f -guard {2 == 2}} f2" + ? {Foo object filters guard f} "2 == 2" + ? {Foo info object filters -guards f} "{f -guard {2 == 2}}" + ? {Foo info object filters -guards f2} "f2" + ? {Foo info object filters -guards} "{f -guard {2 == 2}} f2" ? {Foo object filters set {}} "" Foo destroy nx::Class create Fly o object mixins add Fly - ? {o info object mixin classes} "::Fly ::nx::Class" + ? {o info object mixins} "::Fly ::nx::Class" ? {o object mixins guard ::Fly {1}} "" - ? {o info object mixin classes -guards} "{::Fly -guard 1} ::nx::Class" - ? {o info object mixin classes -guards Fly} "{::Fly -guard 1}" + ? {o info object mixins -guards} "{::Fly -guard 1} ::nx::Class" + ? {o info object mixins -guards Fly} "{::Fly -guard 1}" o object mixins delete ::Fly - ? {o info object mixin classes} "::nx::Class" + ? {o info object mixins} "::nx::Class" nx::Class create Foo Foo mixins add ::nx::Class Foo mixins add Fly - ? {Foo info mixin classes} "::Fly ::nx::Class" + ? {Foo info mixins} "::Fly ::nx::Class" ? {Foo mixins guard ::Fly {1}} "" - ? {Foo info mixin classes -guards} "{::Fly -guard 1} ::nx::Class" - ? {Foo info mixin classes -guards Fly} "{::Fly -guard 1}" + ? {Foo info mixins -guards} "{::Fly -guard 1} ::nx::Class" + ? {Foo info mixins -guards Fly} "{::Fly -guard 1}" Foo mixins delete ::Fly - ? {Foo info mixin classes} "::nx::Class" + ? {Foo info mixins} "::nx::Class" Foo object mixins add ::nx::Class Foo object mixins add Fly - ? {Foo info object mixin classes} "::Fly ::nx::Class" + ? {Foo info object mixins} "::Fly ::nx::Class" ? {Foo object mixins guard ::Fly {1}} "" - ? {Foo info object mixin classes -guards} "{::Fly -guard 1} ::nx::Class" - ? {Foo info object mixin classes -guards Fly} "{::Fly -guard 1}" + ? {Foo info object mixins -guards} "{::Fly -guard 1} ::nx::Class" + ? {Foo info object mixins -guards Fly} "{::Fly -guard 1}" Foo object mixins delete ::Fly - ? {Foo info object mixin classes} "::nx::Class" + ? {Foo info object mixins} "::nx::Class" ? {Foo info lookup methods create} "create" ? {Foo info lookup method create} "::nsf::classes::nx::Class::create" @@ -755,7 +754,7 @@ ? {lsort [::nx::Object info methods -path "*slot*"]} \ "{info lookup slots} {info object slots}" ? {lsort [::nx::Object info methods -path "*filter*"]} \ - "{info lookup filter} {info lookup filters} {info object filter guard} {info object filter methods} {object filters}" + "{info lookup filter} {info lookup filters} {info object filters} {object filters}" ::nx::Class create C { :public method "string length" {s} {puts length} @@ -831,12 +830,12 @@ ? {A info heritage} "::nx::Object" ? {B info heritage} "::M1 ::A ::nx::Object" - ? {B info mixin classes -closure} "::M1" + ? {B info mixins -closure} "::M1" B mixins set M2 ? {A info heritage} "::nx::Object" ? {B info heritage} "::M2 ::A ::nx::Object" - ? {B info mixin classes -closure} "::M2" + ? {B info mixins -closure} "::M2" B mixins set A ? {A info heritage} "::nx::Object" @@ -1024,7 +1023,7 @@ b1 object mixins set {M1 M1 M4} ? {b1 info precedence} "::M1 ::M4 ::M2 ::B ::A ::nx::Object" - ? {b1 info object mixin classes} "::M1 ::M4" + ? {b1 info object mixins} "::M1 ::M4" B mixins set {M3 M1 M1 M4} ? {B info heritage} "::M3 ::M1 ::M4 ::M2 ::A ::nx::Object" @@ -1051,10 +1050,10 @@ # ::A is as well implied by ::PCM C mixins set PCM ? {C info heritage} "::PCM ::A ::nx::Object" - ? {C info mixin classes} "::PCM" - ? {C info mixin classes -order} "" ;# ???? why no warning - ? {C info mixin classes -heritage} "::PCM ::A" - ? {C info mixin classes -closure} "::PCM" + ? {C info mixins} "::PCM" + ? {C info mixins -order} "" ;# ???? why no warning + ? {C info mixins -heritage} "::PCM ::A" + ? {C info mixins -closure} "::PCM" # ::A is not ordered after ::B but after ::PCM ? {c1 info precedence} "::B ::PCM ::A ::C ::nx::Object" @@ -1088,20 +1087,20 @@ ? {c1 info precedence} "::PCMB ::PCMA ::C ::B ::A ::nx::Object" # just the classes mixed explicitly into this class - ? {B info mixin classes} "::PCMB" - ? {C info mixin classes} "" + ? {B info mixins} "::PCMB" + ? {C info mixins} "" # the classes mixed transitive into this class; This answer the # question, what classes were mixed in explicitly into the mixin # hierarchy by the application program - ? {B info mixin classes -closure} "::PCMB" + ? {B info mixins -closure} "::PCMB" # since C is a specialization of B, it includes transitively B's closure - ? {C info mixin classes -closure} "::PCMB" + ? {C info mixins -closure} "::PCMB" - # the explicit and implicit mixin classes - ? {B info mixin classes -heritage} "::PCMB ::PCMA ::A" + # the explicit and implicit mixins + ? {B info mixins -heritage} "::PCMB ::PCMA ::A" # since C is a specialization of B, it inherits the classes from B - ? {C info mixin classes -heritage} "::PCMB ::PCMA ::A" + ? {C info mixins -heritage} "::PCMB ::PCMA ::A" PCMB mixins set TPCMB @@ -1113,18 +1112,18 @@ ? {c1 info precedence} "::TPCMB ::TPCMA ::PCMB ::PCMA ::C ::B ::A ::nx::Object" # just the classes mixed explicitly into this class - ? {B info mixin classes} "::PCMB" - ? {C info mixin classes} "" + ? {B info mixins} "::PCMB" + ? {C info mixins} "" # the classes mixed transitive into this class - ? {B info mixin classes -closure} "::PCMB ::TPCMB" + ? {B info mixins -closure} "::PCMB ::TPCMB" # since C is a specialization of B, it includes transitively B's closure - ? {C info mixin classes -closure} "::PCMB ::TPCMB" + ? {C info mixins -closure} "::PCMB ::TPCMB" - # the explicit and implicit mixin classes - ? {B info mixin classes -heritage} "::TPCMB ::TPCMA ::PCMB ::PCMA ::A" + # the explicit and implicit mixins + ? {B info mixins -heritage} "::TPCMB ::TPCMA ::PCMB ::PCMA ::A" # since C is a specialization of B, it inherits the classes from B - ? {C info mixin classes -heritage} "::TPCMB ::TPCMA ::PCMB ::PCMA ::A" + ? {C info mixins -heritage} "::TPCMB ::TPCMA ::PCMB ::PCMA ::A" C mixins set PCMC @@ -1136,16 +1135,16 @@ ? {c1 info precedence} "::PCMC ::TPCMB ::TPCMA ::PCMB ::PCMA ::C ::B ::A ::nx::Object" # just the classes mixed explicitly into this class - ? {B info mixin classes} "::PCMB" - ? {C info mixin classes} "::PCMC" + ? {B info mixins} "::PCMB" + ? {C info mixins} "::PCMC" # the classes mixed transitive into this class - ? {B info mixin classes -closure} "::PCMB ::TPCMB" - ? {C info mixin classes -closure} "::PCMC ::TPCMB ::PCMB" + ? {B info mixins -closure} "::PCMB ::TPCMB" + ? {C info mixins -closure} "::PCMC ::TPCMB ::PCMB" - # the explicit and implicit mixin classes - ? {B info mixin classes -heritage} "::TPCMB ::TPCMA ::PCMB ::PCMA ::A" - ? {C info mixin classes -heritage} "::PCMC ::TPCMB ::TPCMA ::PCMB ::PCMA ::A" + # the explicit and implicit mixins + ? {B info mixins -heritage} "::TPCMB ::TPCMA ::PCMB ::PCMA ::A" + ? {C info mixins -heritage} "::PCMC ::TPCMB ::TPCMA ::PCMB ::PCMA ::A" } Index: tests/interceptor-slot.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/interceptor-slot.test (.../interceptor-slot.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/interceptor-slot.test (.../interceptor-slot.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -16,34 +16,34 @@ ? {C mixins set M} ::M ? {C info precedence} "::nx::Class ::nx::Object" ? {C mixins get} "::M" - ? {C info mixin classes} "::M" + ? {C info mixins} "::M" ? {c1 info precedence} "::M ::C ::nx::Object" ? {C mixins add M2} "::M2 ::M" ? {c1 info precedence} "::M2 ::M ::C ::nx::Object" ? {C mixins delete M2} "::M" ? {c1 info precedence} "::M ::C ::nx::Object" ? {C mixins delete M} "" - ? {C info mixin classes} "" + ? {C info mixins} "" ? {C mixins set ::M} "::M" ? {C mixins clear} "::M" - ? {C info mixin classes} "" + ? {C info mixins} "" ? {C mixins add ::M} "::M" ? {C mixins set {}} "" - ? {C info mixin classes} "" + ? {C info mixins} "" } # # test nsf::mixin interface # nx::test case nsf-mixin { ? {::nsf::mixin C ::M} "::M" - ? {C info mixin classes} "::M" + ? {C info mixins} "::M" ? {::nsf::mixin C ::M2} "::M2 ::M" - ? {C info mixin classes} "::M2 ::M" + ? {C info mixins} "::M2 ::M" ? {::nsf::mixin C ""} "" - ? {C info mixin classes} "" + ? {C info mixins} "" } # @@ -67,9 +67,9 @@ ? {c1 info precedence} "::C ::nx::Object" ? {c1 object mixins add M} {::M} - ? {c1 info object mixin classes} {::M} + ? {c1 info object mixins} {::M} ? {c1 object mixins clear} {::M} - ? {c1 info object mixin classes} {} + ? {c1 info object mixins} {} } # @@ -79,7 +79,7 @@ nx::test case object-mixin-relation { ? {::nsf::relation::set C object-mixin M} ::M ? {C info precedence} "::M ::nx::Class ::nx::Object" - ? {C info object mixin classes} "::M" + ? {C info object mixins} "::M" ? {::nsf::relation::set C object-mixin ""} "" ? {C info precedence} "::nx::Class ::nx::Object" } @@ -90,7 +90,7 @@ # # C object-mixin M # ? {C info precedence} "::M ::nx::Class ::nx::Object" - # ? {C info object mixin classes} "::M" + # ? {C info object mixins} "::M" # C object-mixin "" # ? {C info precedence} "::nx::Class ::nx::Object" @@ -101,7 +101,7 @@ nx::test case class+mixin { ? {C object mixins set M} ::M ? {C info precedence} "::M ::nx::Class ::nx::Object" - ? {C info object mixin classes} "::M" + ? {C info object mixins} "::M" ? {C object mixins set ""} "" ? {C info precedence} "::nx::Class ::nx::Object" } @@ -112,7 +112,7 @@ nx::test case class+mixin-add { ? {C object mixins add M} ::M ? {C info precedence} "::M ::nx::Class ::nx::Object" - ? {C info object mixin classes} "::M" + ? {C info object mixins} "::M" ? {C object mixins set ""} "" ? {C info precedence} "::nx::Class ::nx::Object" @@ -169,57 +169,57 @@ } ? {::nsf::relation::get cc object-filter} "" - ? {cc info object filter methods} "" + ? {cc info object filters} "" ? {::nsf::relation::set cc object-filter filterA} filterA - ? {cc info object filter methods} "filterA" + ? {cc info object filters} "filterA" ? {cc object filters set filterB} "filterB" ? {::nsf::relation::get cc object-filter} "filterB" - ? {cc info object filter methods} "filterB" + ? {cc info object filters} "filterB" ? {cc object filters add filterD} "filterD filterB" ? {::nsf::relation::get cc object-filter} "filterD filterB" - ? {cc info object filter methods} "filterD filterB" + ? {cc info object filters} "filterD filterB" ? {cc object filters delete filterB} "filterD" ? {::nsf::relation::get cc object-filter} "filterD" - ? {cc info object filter methods} "filterD" + ? {cc info object filters} "filterD" ? {catch {::nsf::relation::set cc object-filter UNKNOWN}} 1 ? {::nsf::relation::get cc object-filter} "filterD" - ? {cc info object filter methods} "filterD" + ? {cc info object filters} "filterD" ? {::nsf::relation::get CC object-filter} "" - ? {CC info object filter methods} "" + ? {CC info object filters} "" ? {::nsf::relation::set CC object-filter filterC} "filterC" ? {::nsf::relation::get CC object-filter} "filterC" - ? {CC info object filter methods} "filterC" + ? {CC info object filters} "filterC" ? {CC object filters clear} "filterC" ? {::nsf::relation::get CC object-filter} "" - ? {CC info object filter methods} "" + ? {CC info object filters} "" ? {::nsf::relation::get CC class-filter} "" - ? {CC info filter methods} "" + ? {CC info filters} "" ? {::nsf::relation::set CC class-filter filterA} "filterA" ? {::nsf::relation::get CC class-filter} "filterA" - ? {CC info filter methods} "filterA" + ? {CC info filters} "filterA" ? {CC filters add filterB} "filterB filterA" ? {::nsf::relation::get CC class-filter} "filterB filterA" - ? {CC info filter methods} "filterB filterA" + ? {CC info filters} "filterB filterA" ? {CC filters delete filterA} "filterB" ? {::nsf::relation::get CC class-filter} "filterB" - ? {CC info filter methods} "filterB" + ? {CC info filters} "filterB" ? {catch {::nsf::relation::set CC class-filter UNKNOWN}} 1 ? {::nsf::relation::get CC class-filter} "filterB" - ? {CC info filter methods} "filterB" + ? {CC info filters} "filterB" ? {CC filters clear} "filterB" ? {::nsf::relation::get CC class-filter} "" - ? {CC info filter methods} "" + ? {CC info filters} "" } @@ -318,13 +318,13 @@ } # -# Test the next-path with mixin classes in cases where a +# Test the next-path with mixins in cases where a # method handle is used for method dispatch # nx::test case mixins+method-handles { # - # Just mixin classes + # Just mixins # nx::Class create A {:public method foo {} {return "A [next]"}} nx::Class create B {:public method foo {} {return "B [next]"}} @@ -338,7 +338,7 @@ ? {c1 [A info method definitionhandle foo]} "A " # - # Intrinsic classes and mixin classes + # Intrinsic classes and mixins # nx::Class create Y {:public method foo {} {return "Y [next]"}} @@ -372,13 +372,13 @@ # -# Test the next-path with mixin classes in cases where a +# Test the next-path with mixins in cases where a # method handle is used for method dispatch # nx::test case mixins+method-handles+intrinsic { # - # Just mixin classes + # Just mixins # nx::Class create A {:public method foo {} {return "A [next]"}} nx::Class create B {:public method foo {} {return "B [next]"}} @@ -393,7 +393,7 @@ # - # Intrinsic classes and mixin classes + # Intrinsic classes and mixins # nx::Class create Y {:public method foo {} {return "Y [next]"}} @@ -654,10 +654,10 @@ # Add spacy class as a mixin. Check, if the introspection returns # sensible values. ? {C mixins add "M1 b"} "{::M1 b}" - ? {C info mixin classes} "{::M1 b}" - ? {M1 info mixin classes} "" + ? {C info mixins} "{::M1 b}" + ? {M1 info mixins} "" ? {M1 info mixinof} "" - ? {"M1 b" info mixin classes} "" + ? {"M1 b" info mixins} "" # check the result of the mixin class ? {c1 foo} "next-::M1 b" Index: tests/interp.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/interp.test (.../interp.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/interp.test (.../interp.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -101,7 +101,7 @@ ? {interp eval $i {c info class}} ::C ? {interp invokehidden $i C info instances ::c} ::c - ? {interp invokehidden $i C info mixin classes} ::M + ? {interp invokehidden $i C info mixins} ::M # Note, for all introspections that do *not* try to convert the # Tcl_Obj into an object or a class, but treat it as a pattern (or @@ -716,7 +716,7 @@ } ? {$i eval {o info precedence}} "::M1 ::M2 ::nx::Object" - ? {$i eval {o info object mixin classes}} {::M1 ::M2} + ? {$i eval {o info object mixins}} {::M1 ::M2} ? {$i hidden} "" $i hide M1 ? {$i hidden} M1 @@ -733,7 +733,7 @@ # $i eval {::M2 destroy} ? {$i eval {o info precedence}} "::M1 ::nx::Object" - ? {$i eval {o info object mixin classes}} "::M1" + ? {$i eval {o info object mixins}} "::M1" ? {$i invokehidden M1 info mixinof} "::o" interp delete $i Index: tests/method-parameter.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/method-parameter.test (.../method-parameter.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/method-parameter.test (.../method-parameter.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -107,7 +107,7 @@ nx::test case flag-in-ensemble { nx::Class create C - set info {info children, info class, info filter guard, info filter methods, info has mixin, info has namespace, info has type, info heritage, info info, info instances, info lookup filter, info lookup filters, info lookup method, info lookup methods, info lookup mixins, info lookup parameters, info lookup slots, info lookup syntax, info lookup variables, info method args, info method body, info method definition, info method definitionhandle, info method exists, info method handle, info method origin, info method parameters, info method registrationhandle, info method returns, info method submethods, info method syntax, info method type, info methods, info mixin classes, info mixin guard, info mixinof, info name, info object filter guard, info object filter methods, info object method args, info object method body, info object method definition, info object method definitionhandle, info object method exists, info object method handle, info object method origin, info object method parameters, info object method registrationhandle, info object method returns, info object method submethods, info object method syntax, info object method type, info object methods, info object mixin classes, info object mixin guard, info object slots, info object variables, info parent, info precedence, info slots, info subclasses, info superclasses, info variable definition, info variable name, info variable parameter, info variables, info vars} + set info {info children, info class, info filters, info has mixin, info has namespace, info has type, info heritage, info info, info instances, info lookup filter, info lookup filters, info lookup method, info lookup methods, info lookup mixins, info lookup parameters, info lookup slots, info lookup syntax, info lookup variables, info method args, info method body, info method definition, info method definitionhandle, info method exists, info method handle, info method origin, info method parameters, info method registrationhandle, info method returns, info method submethods, info method syntax, info method type, info methods, info mixinof, info mixins, info name, info object filters, info object method args, info object method body, info object method definition, info object method definitionhandle, info object method exists, info object method handle, info object method origin, info object method parameters, info object method registrationhandle, info object method returns, info object method submethods, info object method syntax, info object method type, info object methods, info object mixins, info object slots, info object variables, info parent, info precedence, info slots, info subclasses, info superclasses, info variable definition, info variable name, info variable parameter, info variables, info vars} ? {C info superclasses} "::nx::Object" ? {C info -a superclass} "unable to dispatch sub-method \"-a\" of ::C info; valid are: $info" Index: tests/methods.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/methods.test (.../methods.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/methods.test (.../methods.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -205,19 +205,54 @@ nx::Class create M # register the mixin on C as a object mixin and define a mixinguard - puts stderr XXXX=[nx::Class info method definition mixin] + + #C mixins set M + #C mixins guard M {1 == 1} + #? {C info mixin guard M} "1 == 1" + #C mixins guard M {} + #? {C info mixin guard M} "" + + # + # set guard via converter + # + C mixins set {{M -guard {1 == 1}}} + ? {C info mixins -guard} "{::M -guard {1 == 1}}" + ? {C mixins get} "{::M -guard {1 == 1}}" + + # + # set/clear guard via relation slot + # C mixins set M - C mixins guard M {1 == 1} - ? {C info mixin guard M} "1 == 1" - C mixins guard M {} - ? {C info mixin guard M} "" + ? {C mixins guard M {1 == 1}} "" + ? {C mixins get} "{::M -guard {1 == 1}}" + ? {C info mixins -guard} "{::M -guard {1 == 1}}" + ? {C info mixins} "::M" - # now the same as class mixin and class mixin guard + ? {C mixins guard M ""} "" + ? {C mixins get} "::M" + ? {C info mixins -guard} "::M" + + # + # now the same as object mixin and object mixin guard + # + # set guard via converter + # + C object mixins set {{M -guard {1 == 1}}} + ? {C info object mixins -guard} "{::M -guard {1 == 1}}" + ? {C info object mixins} "::M" + ? {C object mixins get} "{::M -guard {1 == 1}}" + + # + # set/clear guard via relation slot + # C object mixins set M C object mixins guard M {1 == 1} - ? {C info object mixin guard M} "1 == 1" - C object mixins guard M {} - ? {C info object mixin guard M} "" + ? {C object mixins get} "{::M -guard {1 == 1}}" + ? {C info object mixins -guard} "{::M -guard {1 == 1}}" + ? {C info object mixins} "::M" + + ? {C object mixins guard M {}} "" + ? {C info object mixins -guard} "::M" } nx::test case mixin-via-objectparam { @@ -229,27 +264,27 @@ :object mixins add M4 } - ? {lsort [C info object mixin classes]} "::M2 ::M4" - ? {lsort [C info mixin classes]} "::M1 ::M3" + ? {lsort [C info object mixins]} "::M2 ::M4" + ? {lsort [C info mixins]} "::M1 ::M3" ? {lsort [C object mixins get]} "::M2 ::M4" ? {lsort [C mixins get]} "::M1 ::M3" - ? {lsort [C object mixins]} {wrong # args: use "::C object mixins add|clear|delete|get|guard|set"} - ? {lsort [C mixins]} {wrong # args: use "::C mixins add|clear|delete|get|guard|set"} - ? {lsort [C mixins x]} {submethod x undefined for mixins: use "::C mixins add|clear|delete|get|guard|set"} + ? {lsort [C object mixins]} {wrong # args: use "::C object mixins add|classes|clear|delete|get|guard|set"} + ? {lsort [C mixins]} {wrong # args: use "::C mixins add|classes|clear|delete|get|guard|set"} + ? {lsort [C mixins x]} {submethod x undefined for mixins: use "::C mixins add|classes|clear|delete|get|guard|set"} ? {catch {C mixin M5} errorMsg} 1 - ? {lsort [C info mixin classes]} "::M1 ::M3" + ? {lsort [C info mixins]} "::M1 ::M3" ? {catch {C object mixin M5} errorMsg} 1 - ? {lsort [C info object mixin classes]} "::M2 ::M4" + ? {lsort [C info object mixins]} "::M2 ::M4" ? {C mixins set M5} ::M5 - ? {lsort [C info mixin classes]} "::M5" + ? {lsort [C info mixins]} "::M5" ? {C object mixins set M5} "::M5" - ? {lsort [C info object mixin classes]} "::M5" + ? {lsort [C info object mixins]} "::M5" ? {C configure -mixin M1} "" ? {C cget -mixin} "::M1" Index: tests/mixinof.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/mixinof.test (.../mixinof.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/mixinof.test (.../mixinof.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -14,7 +14,7 @@ nx::Object create o -object-mixins A ? {o object mixins get} ::A - ? {o info object mixin classes} ::A + ? {o info object mixins} ::A ? {A info mixinof} ::o o destroy @@ -56,17 +56,17 @@ nx::Class create M {:method foo args {puts x;next}} nx::Object create o -object-mixins M - ? {o info object mixin classes} ::M + ? {o info object mixins} ::M ? {o info precedence} "::M ::nx::Object" ? {o info lookup method foo} "::nsf::classes::M::foo" nx::Class create M {:method foo args next} - ? {o info object mixin classes} ::M + ? {o info object mixins} ::M ? {o info precedence} "::M ::nx::Object" ? {o info lookup method foo} "::nsf::classes::M::foo" M destroy - ? {o info object mixin classes} "" + ? {o info object mixins} "" ? {o info precedence} "::nx::Object" ? {o info lookup method foo} "" } @@ -82,7 +82,7 @@ C create c1 ? {B mixins get} ::A - ? {B info mixin classes} ::A + ? {B info mixins} ::A ? {A info mixinof} ::B ? {c1 info precedence} "::A ::C ::B ::nx::Object" @@ -103,16 +103,16 @@ A mixins guard M1 "test" nx::Class create B -superclass A - ? {A info mixin classes M2} ::M2 - ? {A info mixin classes M*} "::M1 ::M2" - ? {A info mixin classes -guards} "{::M1 -guard test} ::M2 ::X" - ? {B info mixin classes} "" - ? {B info mixin classes -closure} "::M1 ::M2 ::X" - ? {B info mixin classes -closure M2} ::M2 - ? {B info mixin classes -closure M*} "::M1 ::M2" - ? {B info mixin classes -closure -guards} "{::M1 -guard test} ::M2 ::X" - ? {B info mixin classes -closure -guards M1} "{::M1 -guard test}" - ? {B info mixin classes -closure -guards M*} "{::M1 -guard test} ::M2" + ? {A info mixins M2} ::M2 + ? {A info mixins M*} "::M1 ::M2" + ? {A info mixins -guards} "{::M1 -guard test} ::M2 ::X" + ? {B info mixins} "" + ? {B info mixins -closure} "::M1 ::M2 ::X" + ? {B info mixins -closure M2} ::M2 + ? {B info mixins -closure M*} "::M1 ::M2" + ? {B info mixins -closure -guards} "{::M1 -guard test} ::M2 ::X" + ? {B info mixins -closure -guards M1} "{::M1 -guard test}" + ? {B info mixins -closure -guards M*} "{::M1 -guard test} ::M2" } ########################################### @@ -130,7 +130,7 @@ C create c1 ? {B mixins get} ::A - ? {B info mixin classes} ::A + ? {B info mixins} ::A ? {A info mixinof -scope class} ::B ? {a1 info precedence} "::M ::A ::nx::Object" ? {b1 info precedence} "::M ::A ::B ::nx::Object" @@ -145,7 +145,7 @@ ? {B info mixinof -scope class} "" ? {B info mixinof -scope class -closure} "" - # and now destroy mixin classes + # and now destroy mixins M destroy ? {a1 info precedence} "::A ::nx::Object" ? {b1 info precedence} "::A ::B ::nx::Object" @@ -168,7 +168,7 @@ nx::Class create B -superclass A B create b1 - # ::C and ::D come to ::A and B as mixin classes + # ::C and ::D come to ::A and B as mixins ? {A info heritage} "::C ::D ::nx::Object" ? {B info heritage} "::C ::D ::A ::nx::Object" @@ -233,7 +233,7 @@ C create c1 ? {B mixins get} ::A - ? {B info mixin classes} ::A + ? {B info mixins} ::A ? {A info mixinof -scope class} ::B ? {a1 info precedence} "::M ::A ::nx::Object" ? {b1 info precedence} "::M ::A ::B ::nx::Object" @@ -267,7 +267,7 @@ C create c1 ? {B mixins get} ::A - ? {B info mixin classes} ::A + ? {B info mixins} ::A ? {A info mixinof -scope class} ::B ? {a1 info precedence} "::M ::A ::nx::Object" ? {b1 info precedence} "::M ::A ::B ::nx::Object" @@ -294,7 +294,7 @@ C create c1 ? {B mixins get} ::A - ? {B info mixin classes} ::A + ? {B info mixins} ::A ? {A info mixinof -scope class} ::B ? {c1 info precedence} "::A ::C ::B ::nx::Object" ? {B info superclasses -closure} "::nx::Object" @@ -309,7 +309,7 @@ ? {B info heritage} "::A ::nx::Object" ? {C info heritage} "::nx::Object" ? {B mixins get} ::A - ? {B info mixin classes} ::A + ? {B info mixins} ::A ? {A info mixinof} ::B ? {c1 info precedence} "::C ::nx::Object" @@ -331,7 +331,7 @@ C create c1 ? {B mixins get} ::A - ? {B info mixin classes} ::A + ? {B info mixins} ::A ? {A info mixinof -scope class} ::B ? {c1 info precedence} "::A ::C ::B ::nx::Object" ? {B info superclasses -closure} "::nx::Object" @@ -345,7 +345,7 @@ ? {C info superclasses -closure} "::B ::nx::Object" ? {B info heritage} "::A ::nx::Object" ? {C info heritage} "::A ::B ::nx::Object" - ? {B info mixin classes} ::A + ? {B info mixins} ::A ? {A info mixinof -scope class} ::B ? {c1 info precedence} "::A ::C ::B ::nx::Object" @@ -531,7 +531,7 @@ C2 create c22 ? {c1 object mixins get} ::A - ? {c1 info object mixin classes} ::A + ? {c1 info object mixins} ::A ? {lsort [A info mixinof]} "::C2 ::c1" ? {M info mixinof} "" C mixins set M Index: tests/parameters.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/parameters.test (.../parameters.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/parameters.test (.../parameters.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -805,23 +805,30 @@ C create c5 -object-mixins {M {M2 -guard 2}} nx::Object create o - ? {c1 info object mixin classes} ::M - ? {c1 info object mixin guard ::M} "" + ? {c1 object mixins get} ::M + ? {c1 object mixins guard ::M} "" - ? {c2 info object mixin classes} ::M - ? {c2 info object mixin guard ::M} "true" + ? {c2 object mixins get} {{::M -guard true}} + ? {c2 object mixins classes} ::M + ? {c2 object mixins guard ::M} "true" - ? {c3 info object mixin classes} {::M ::M2} - ? {c3 info object mixin guard M} "" - ? {c3 info object mixin guard M2} "" + ? {c3 object mixins get} {::M ::M2} + ? {c3 object mixins guard M} "" + ? {c3 object mixins guard M2} "" - ? {c4 info object mixin classes} {::M ::M2} - ? {c4 info object mixin guard M} "1" - ? {c4 info object mixin guard M2} "" + ? {c4 object mixins get} {{::M -guard 1} ::M2} + ? {c4 object mixins classes} {::M ::M2} + ? {c4 object mixins classes M} ::M + ? {c4 object mixins classes M1} "" + ? {c4 object mixins guard M} "1" + ? {c4 object mixins guard M2} "" - ? {c5 info object mixin classes} {::M ::M2} - ? {c5 info object mixin guard M} "" - ? {c5 info object mixin guard M2} "2" + ? {c5 object mixins get} {::M {::M2 -guard 2}} + ? {c5 object mixins classes} {::M ::M2} + ? {c5 object mixins classes M} {::M} + ? {c5 object mixins classes M1} "" + ? {c5 object mixins guard M} "" + ? {c5 object mixins guard M2} "2" D public method foo-base {x:baseclass} {return $x} D public method foo-class {x:class} {return $x} @@ -1965,15 +1972,15 @@ # we have now per-object mixin of M1, we should have "-b1" but no # "-b2" # - ? {c1 info object mixin classes} ::M1 + ? {c1 info object mixins} ::M1 ? {c1 cget -object-mixin} ::M1 ? {c1 info lookup parameters configure b*} "-b1:required" # # add one more mixin. # c1 object mixins add ::M2 - ? {c1 info object mixin classes} {::M2 ::M1} + ? {c1 info object mixins} {::M2 ::M1} ? {c1 cget -object-mixin} {::M2 ::M1} ? {c1 info lookup parameters configure b1} "-b1:required" ? {c1 info lookup parameters configure b2} "-b2:required" @@ -1983,14 +1990,14 @@ # drop the mixins, the b* properties should be gone. # c1 object mixins set "" - ? {c1 info object mixin classes} {} + ? {c1 info object mixins} {} ? {lsort [c1 info lookup parameters configure b*]} "" # # add M1 again # c1 object mixins add ::M1 - ? {c1 info object mixin classes} {::M1} + ? {c1 info object mixins} {::M1} ? {c1 info lookup parameters configure b1} "-b1:required" ? {lsort [c1 info lookup parameters configure b*]} "-b1:required" # Index: tests/plain-object-method.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/plain-object-method.test (.../plain-object-method.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/plain-object-method.test (.../plain-object-method.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -50,17 +50,17 @@ ? {o fwd} "pm1" ? {o mixins set M1} ::M1 - ? {o info mixin classes} ::M1 + ? {o info mixins} ::M1 ? {o mixins set ""} "" - ? {o info mixin classes} "" + ? {o info mixins} "" ? {o filters set f} f - ? {o info filter methods} f + ? {o info filters} f ? {o filters set ""} "" - ? {o info filter methods} "" + ? {o info filters} "" ? {lsort [o info object methods]} "a f foo fwd p v2" - ? {lsort [o info]} "valid submethods of ::o info: children class filter has info lookup method methods mixin name object parent precedence slots variable variables vars" + ? {lsort [o info]} "valid submethods of ::o info: children class filters has info lookup method methods mixins name object parent precedence slots variable variables vars" } # Index: tests/submethods.test =================================================================== diff -u -r275da34d3d7a874a451eced58242b738c8a37d1a -r0f881e4bc45e927c8d84c1b1b468ef7537cb9b03 --- tests/submethods.test (.../submethods.test) (revision 275da34d3d7a874a451eced58242b738c8a37d1a) +++ tests/submethods.test (.../submethods.test) (revision 0f881e4bc45e927c8d84c1b1b468ef7537cb9b03) @@ -9,8 +9,8 @@ nx::test case info-errors { ? {::nx::Object info subclasses a b c} \ {invalid argument 'b', maybe too many arguments; should be "::nx::Object info subclasses ?-closure? ?-dependent? ?/pattern/?"} - ? {::nx::Object info object mixin classes a b c} \ - {invalid argument 'b', maybe too many arguments; should be "::nx::Object info object mixin classes ?-guards? ?/pattern/?"} + ? {::nx::Object info object mixins a b c} \ + {invalid argument 'b', maybe too many arguments; should be "::nx::Object info object mixins ?-guards? ?/pattern/?"} } nx::test configure -count 10