Index: TODO =================================================================== diff -u -rb3018d3be0f1524a3f1709edc0e2ddb5d8bc4c0b -r5b2eafb18ce22d7aa8cef352f535da5046cac7d9 --- TODO (.../TODO) (revision b3018d3be0f1524a3f1709edc0e2ddb5d8bc4c0b) +++ TODO (.../TODO) (revision 5b2eafb18ce22d7aa8cef352f535da5046cac7d9) @@ -2537,8 +2537,8 @@ class should be straightforward. * various documentation updates (migration guide, nx tutorial) +* fixed bad interaction between filter and parameter alias - TODO: - maybe the destructor of a slot should remove the setter/forwarder - how to delete attributes Index: generic/nsf.c =================================================================== diff -u -rb3018d3be0f1524a3f1709edc0e2ddb5d8bc4c0b -r5b2eafb18ce22d7aa8cef352f535da5046cac7d9 --- generic/nsf.c (.../nsf.c) (revision b3018d3be0f1524a3f1709edc0e2ddb5d8bc4c0b) +++ generic/nsf.c (.../nsf.c) (revision 5b2eafb18ce22d7aa8cef352f535da5046cac7d9) @@ -10230,17 +10230,23 @@ * If we are already in the precedence ordering, then advance * past our last point; otherwise (if clPtr==NULL) begin from the start. * - * When a mixin or filter chain reached its end, we have to search - * the obj-specific methods as well. + * When a mixin or filter chain reached its end, we have to check for + * absolute method names and search the obj-specific methods as well. */ - - if (object->nsPtr && endOfChain) { - *cmdPtr = FindMethod(object->nsPtr, *methodNamePtr); + if (endOfChain) { + if (**methodNamePtr == ':') { + *cmdPtr = Tcl_FindCommand(interp, *methodNamePtr, NULL, TCL_GLOBAL_ONLY); + /* fprintf(stderr, "NEXT found abolute cmd %s => %p\n", *methodNamePtr, *cmdPtr); */ + } else if (object->nsPtr) { + *cmdPtr = FindMethod(object->nsPtr, *methodNamePtr); + } else { + *cmdPtr = NULL; + } } else { *cmdPtr = NULL; } - /* printf(stderr, "NEXT methodName %s *clPtr %p %s *cmd %p\n", + /*fprintf(stderr, "NEXT methodName %s *clPtr %p %s *cmd %p\n", *methodNamePtr, *clPtr, ClassName((*clPtr)), *cmdPtr);*/ if (!*cmdPtr) { Index: library/nx/nx.tcl =================================================================== diff -u -rb3018d3be0f1524a3f1709edc0e2ddb5d8bc4c0b -r5b2eafb18ce22d7aa8cef352f535da5046cac7d9 --- library/nx/nx.tcl (.../nx.tcl) (revision b3018d3be0f1524a3f1709edc0e2ddb5d8bc4c0b) +++ library/nx/nx.tcl (.../nx.tcl) (revision 5b2eafb18ce22d7aa8cef352f535da5046cac7d9) @@ -1081,9 +1081,9 @@ # create "superclass" as a ObjectParameterSlot # #::nx::RelationSlot create ${os}::Class::slot::superclass -default ${os}::Object - #::nx::ObjectParameterSlot create ${os}::Class::slot::superclass \ - -methodname "::nsf::methods::class::superclass" -default ${os}::Object ::nx::ObjectParameterSlot create ${os}::Class::slot::superclass \ + -methodname "::nsf::methods::class::superclass" -default ${os}::Object + #::nx::ObjectParameterSlot create ${os}::Class::slot::superclass \ -methodname "::nsf::relation %self superclass" -disposition forward -default ${os}::Object Index: tests/parameters.test =================================================================== diff -u -r3b7a544e17d23c11227445e2949b94b953fc312c -r5b2eafb18ce22d7aa8cef352f535da5046cac7d9 --- tests/parameters.test (.../parameters.test) (revision 3b7a544e17d23c11227445e2949b94b953fc312c) +++ tests/parameters.test (.../parameters.test) (revision 5b2eafb18ce22d7aa8cef352f535da5046cac7d9) @@ -249,7 +249,7 @@ C create c1 ? {C eval {:objectparameter}} \ - "{{-superclass:forward,arg=::nsf::relation %self superclass} ::nx::Object} -object-mixin:alias,arg=::nsf::classes::nx::Object::mixin -mixin:alias -object-filter:alias,arg=::nsf::classes::nx::Object::filter -filter:alias -attributes:alias -volatile:alias,noarg -noinit:alias,arg=::nsf::methods::object::noinit,noarg -class:alias,arg=::nsf::methods::object::class __initcmd:initcmd,optional" + "{-superclass:alias,arg=::nsf::methods::class::superclass ::nx::Object} -object-mixin:alias,arg=::nsf::classes::nx::Object::mixin -mixin:alias -object-filter:alias,arg=::nsf::classes::nx::Object::filter -filter:alias -attributes:alias -volatile:alias,noarg -noinit:alias,arg=::nsf::methods::object::noinit,noarg -class:alias,arg=::nsf::methods::object::class __initcmd:initcmd,optional" ? {c1 eval {:objectparameter}} \ "-a -b:boolean {-c 1} -volatile:alias,noarg -noinit:alias,arg=::nsf::methods::object::noinit,noarg -mixin:alias -class:alias,arg=::nsf::methods::object::class -filter:alias __initcmd:initcmd,optional"