Index: generic/xotcl.c =================================================================== diff -u -r687ce97e09a55bbe80cf5286b481fcd3ec600c0e -rda698cea68820b29aee096ac16be0372feac21e1 --- generic/xotcl.c (.../xotcl.c) (revision 687ce97e09a55bbe80cf5286b481fcd3ec600c0e) +++ generic/xotcl.c (.../xotcl.c) (revision da698cea68820b29aee096ac16be0372feac21e1) @@ -5852,10 +5852,10 @@ objflags = obj->flags; } - /* Only start new filter chain, if - (a) filters are defined and - (b) the toplevel csc entry is not an filter on self - */ + /* Only start new filter chain, if + (a) filters are defined and + (b) the toplevel csc entry is not an filter on self + */ if (((objflags & XOTCL_FILTER_ORDER_DEFINED_AND_VALID) == XOTCL_FILTER_ORDER_DEFINED_AND_VALID) && rst->doFilters @@ -5903,6 +5903,22 @@ } } + /* check if an absolute method name was provided */ + if (*methodName == ':') { + cmd = Tcl_GetCommandFromObj(interp, methodObj); + if (cmd) { + CONST char *mn = Tcl_GetCommandName(interp, cmd); + if (isClassName(methodName)) { + char *className = NSCutXOTclClasses(methodName); + Tcl_DString ds, *dsPtr = &ds; + DSTRING_INIT(dsPtr); + Tcl_DStringAppend(dsPtr, className, strlen(className)-strlen(mn)-2); + cl = (XOTclClass *)XOTclpGetObject(interp, Tcl_DStringValue(dsPtr)); + DSTRING_FREE(dsPtr); + } + } + } + /* if no filter/mixin is found => do ordinary method lookup */ if (cmd == NULL) {