Index: generic/nsf.c =================================================================== diff -u -rf3127511bec503add89e7a691f33213b1999274d -r5a52de99a37feece8dd6efe6d70c3559d233a6fb --- generic/nsf.c (.../nsf.c) (revision f3127511bec503add89e7a691f33213b1999274d) +++ generic/nsf.c (.../nsf.c) (revision 5a52de99a37feece8dd6efe6d70c3559d233a6fb) @@ -8571,9 +8571,7 @@ * method path, and the unknown final method. */ Tcl_Obj *callInfoObj = Tcl_NewListObj(1, &object->cmdName); - Tcl_Obj *methodPathObj = CallStackMethodPath(interp, - (Tcl_CallFrame *)framePtr, - Tcl_NewListObj(0, NULL)); + Tcl_Obj *methodPathObj = CallStackMethodPath(interp, (Tcl_CallFrame *)framePtr); /*fprintf(stderr, "next calls DispatchUnknownMethod\n");*/ Tcl_ListObjAppendList(interp, callInfoObj, methodPathObj); @@ -18178,7 +18176,7 @@ case CurrentoptionMethodpathIdx: cscPtr = CallStackGetTopFrame(interp, &framePtr); - Tcl_SetObjResult(interp, CallStackMethodPath(interp, framePtr, Tcl_NewListObj(0, NULL))); + Tcl_SetObjResult(interp, CallStackMethodPath(interp, framePtr)); break; case CurrentoptionClassIdx: /* class subcommand */ @@ -18231,14 +18229,12 @@ break; case CurrentoptionCallingmethodIdx: - case CurrentoptionCallingprocIdx: + case CurrentoptionCallingprocIdx: { + Tcl_Obj *resultObj; + cscPtr = NsfCallStackFindLastInvocation(interp, 1, &framePtr); - Tcl_Obj *resultObj = NsfGlobalObjs[NSF_EMPTY]; if (cscPtr && cscPtr->cmdPtr) { - Tcl_Obj *methodNameObj = NULL; - - methodNameObj = resultObj = - Tcl_NewStringObj((char *)Tcl_GetCommandName(interp, cscPtr->cmdPtr), -1); + Tcl_Obj *methodNameObj = Tcl_NewStringObj(Tcl_GetCommandName(interp, cscPtr->cmdPtr), -1); /* * By checking the characteristic frame and call type pattern for "leaf" * ensemble dispatches, we make sure that the method path is only @@ -18247,18 +18243,22 @@ */ if ((cscPtr->frameType & NSF_CSC_TYPE_ENSEMBLE) && (cscPtr->flags & NSF_CSC_CALL_IS_COMPILE) == 0) { - resultObj = CallStackMethodPath(interp, framePtr, Tcl_NewListObj(0, NULL)); + resultObj = CallStackMethodPath(interp, framePtr); result = Tcl_ListObjAppendElement(interp, resultObj, methodNameObj); if (result != TCL_OK) { DECR_REF_COUNT(resultObj); DECR_REF_COUNT(methodNameObj); break; } + } else { + resultObj = methodNameObj; } + } else { + resultObj = NsfGlobalObjs[NSF_EMPTY]; } Tcl_SetObjResult(interp, resultObj); break; - + } case CurrentoptionCallingclassIdx: cscPtr = NsfCallStackFindLastInvocation(interp, 1, NULL); Tcl_SetObjResult(interp, cscPtr && cscPtr->cl ? cscPtr->cl->object.cmdName : Index: generic/nsfStack.c =================================================================== diff -u -rf3127511bec503add89e7a691f33213b1999274d -r5a52de99a37feece8dd6efe6d70c3559d233a6fb --- generic/nsfStack.c (.../nsfStack.c) (revision f3127511bec503add89e7a691f33213b1999274d) +++ generic/nsfStack.c (.../nsfStack.c) (revision 5a52de99a37feece8dd6efe6d70c3559d233a6fb) @@ -592,13 +592,14 @@ *---------------------------------------------------------------------- */ static Tcl_Obj* -CallStackMethodPath(Tcl_Interp *interp, Tcl_CallFrame *framePtr, Tcl_Obj *methodPathObj) { +CallStackMethodPath(Tcl_Interp *interp, Tcl_CallFrame *framePtr) { int elements; Tcl_Obj *resultObj; + Tcl_Obj *methodPathObj = Tcl_NewListObj(0, NULL); assert(framePtr); /* - * Append all ensemble names to the specified list obj + * Append all ensemble names to the specified list obj */ for (/* Skipping the starting frame, assumingly a "leaf" frame in an ensemle dispatch */ @@ -667,7 +668,7 @@ /* *---------------------------------------------------------------------- - * CallStackMethodPath -- + * FilterActiveOnObj -- * * Check, if there is an active filter on "obj" using the specified * cmd.