Index: generic/nsf.c =================================================================== diff -u -r80f0bcea5ed8961fe0d7d9fcb1d7e5d407951823 -rb2edd7ca322d0135e310c1ee1ce0cc1b39e7c86d --- generic/nsf.c (.../nsf.c) (revision 80f0bcea5ed8961fe0d7d9fcb1d7e5d407951823) +++ generic/nsf.c (.../nsf.c) (revision b2edd7ca322d0135e310c1ee1ce0cc1b39e7c86d) @@ -9631,12 +9631,47 @@ Tcl_GetCommandName(interp, cmd), NSF_CSC_TYPE_PLAIN, flags); #endif +#if 1 + /* simple and brutal */ + if (likely(invokedObject->nsPtr != NULL)) { + subMethodCmd = FindMethod(invokedObject->nsPtr, subMethodName); + } else { + subMethodCmd = NULL; + } + + if (subMethodCmd == NULL) { + /* no -system handling */ + actualClass = SearchPLMethod(invokedObject->cl->order, subMethodName, &subMethodCmd, NSF_CMD_CALL_PRIVATE_METHOD); + } + if (likely(subMethodCmd != NULL)) { + cscPtr->objc = objc; + cscPtr->objv = objv; + Nsf_PushFrameCsc(interp, cscPtr, framePtr); + result = MethodDispatch(actualSelf, + interp, objc-1, objv+1, + subMethodCmd, actualSelf, actualClass, subMethodName, + cscPtr->frameType|NSF_CSC_TYPE_ENSEMBLE, + (cscPtr->flags & 0xFF)|NSF_CSC_IMMEDIATE); + Nsf_PopFrameCsc(interp, framePtr); + return result; + } + + /*fprintf(stderr, "... objv[0] %s cmd %p %s csc %p\n", + ObjStr(objv[0]), subMethodCmd, subMethodName, cscPtr); */ + + if (0) { + fprintf(stderr, "new unknown\n"); + return DispatchUnknownMethod(interp, invokedObject, /* objc-1, objv+1*/ objc, objv, actualSelf->cmdName, + objv[1], NSF_CM_NO_OBJECT_METHOD|NSF_CSC_IMMEDIATE); + } +#endif return ObjectDispatch(actualSelf, interp, objc, objv, NSF_CM_KEEP_CALLER_SELF); } /* * NSF_PER_OBJECT_DISPATCH is set */ + if (likely(invokedObject->nsPtr != NULL)) { subMethodCmd = FindMethod(invokedObject->nsPtr, subMethodName); } else {