Index: generic/nsfStack.c =================================================================== diff -u -rb19a6e9aa168b386cf12ae0f66998c7a2a9ce495 -rd137fce76cdcb71cb10ea76a24e480923124d12c --- generic/nsfStack.c (.../nsfStack.c) (revision b19a6e9aa168b386cf12ae0f66998c7a2a9ce495) +++ generic/nsfStack.c (.../nsfStack.c) (revision d137fce76cdcb71cb10ea76a24e480923124d12c) @@ -129,8 +129,15 @@ return framePtr; } -#define SKIP_LEVELS +//#define SKIP_LEVELS 1 +#define SKIP_LAMBDA 1 +#if defined(SKIP_LAMBDA) +# if !defined(SKIP_LEVELS) +# define SKIP_LEVELS 1 +# endif +#endif + NSF_INLINE static NsfObject* GetSelfObj(Tcl_Interp *interp) { register Tcl_CallFrame *varFramePtr = (Tcl_CallFrame *)Tcl_Interp_varFramePtr(interp); @@ -146,16 +153,22 @@ NULL #endif ) { - register int flag = Tcl_CallFrame_isProcCallFrame(varFramePtr); + register int flags = Tcl_CallFrame_isProcCallFrame(varFramePtr); - if (flag & (FRAME_IS_NSF_METHOD|FRAME_IS_NSF_CMETHOD)) { + if (flags & (FRAME_IS_NSF_METHOD|FRAME_IS_NSF_CMETHOD)) { NsfCallStackContent *cscPtr = (NsfCallStackContent *)Tcl_CallFrame_clientData(varFramePtr); return cscPtr->self; - } else if (flag & FRAME_IS_NSF_OBJECT) { + } else if (flags & FRAME_IS_NSF_OBJECT) { return (NsfObject *)Tcl_CallFrame_clientData(varFramePtr); } +#if defined(SKIP_LAMBDA) + if (flags & FRAME_IS_LAMBDA) { + continue; + } + break; +#endif } return NULL; }