Index: generic/nsfStack.c =================================================================== diff -u -ra46b80b67f14a3e114ac45566797f122272ad98c -rbc9096dbfe6718828baf2359730f098d66598065 --- generic/nsfStack.c (.../nsfStack.c) (revision a46b80b67f14a3e114ac45566797f122272ad98c) +++ generic/nsfStack.c (.../nsfStack.c) (revision bc9096dbfe6718828baf2359730f098d66598065) @@ -280,7 +280,44 @@ return NULL; } + /* + *---------------------------------------------------------------------- + * CallStackFindEnsembleCsc -- + * + * Return the callstack content and the optionally the stack frame + * of the last ensemble invocation. + * + * Results: + * callstack content + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ +static NsfCallStackContent * +CallStackFindEnsembleCsc(Tcl_CallFrame *framePtr, Tcl_CallFrame **framePtrPtr) { + register Tcl_CallFrame *varFramePtr; + NsfCallStackContent *cscPtr = NULL; + + assert(framePtr); + for (varFramePtr = Tcl_CallFrame_callerPtr(framePtr); + Tcl_CallFrame_isProcCallFrame(varFramePtr) & FRAME_IS_NSF_CMETHOD; + varFramePtr = Tcl_CallFrame_callerPtr(varFramePtr)) { + cscPtr = (NsfCallStackContent *)Tcl_CallFrame_clientData(varFramePtr); + assert(cscPtr); + /* + * The test for CALL_IS_ENSEMBLE is just a saftey belt + */ + if ((cscPtr->callType & NSF_CSC_CALL_IS_ENSEMBLE) == 0) break; + } + *framePtrPtr = varFramePtr; + + return cscPtr; +} + +/* * check, if there is an active filters on "obj" using cmd */ NSF_INLINE static int