Index: generic/xotclStack85.c =================================================================== diff -u -rd95451e8dfcba3da8e8aeafbb9efc017e0ec2968 -rcba6f4b7f64936e10a49fbdbb0d579815e0074da --- generic/xotclStack85.c (.../xotclStack85.c) (revision d95451e8dfcba3da8e8aeafbb9efc017e0ec2968) +++ generic/xotclStack85.c (.../xotclStack85.c) (revision cba6f4b7f64936e10a49fbdbb0d579815e0074da) @@ -352,14 +352,22 @@ while (1) { Tcl_CallFrame *framePtr = Tcl_Interp_framePtr(interp); + int frameFlags; + if (!framePtr) break; if (Tcl_CallFrame_level(framePtr) == 0) break; - if (Tcl_CallFrame_isProcCallFrame(framePtr) & (FRAME_IS_XOTCL_METHOD|FRAME_IS_XOTCL_CMETHOD)) { + frameFlags = Tcl_CallFrame_isProcCallFrame(framePtr); + /*fprintf(stderr, "... popping %p frameflags %.6x\n", framePtr, frameFlags);*/ + + if (frameFlags & (FRAME_IS_XOTCL_METHOD|FRAME_IS_XOTCL_CMETHOD)) { /* free the call stack content; we need this just for decr activation count */ XOTclCallStackContent *cscPtr = ((XOTclCallStackContent *)Tcl_CallFrame_clientData(framePtr)); CallStackPop(interp, cscPtr); + } else if (frameFlags & FRAME_IS_XOTCL_OBJECT) { + Tcl_CallFrame_varTablePtr(framePtr) = NULL; } + /* pop the Tcl frame */ Tcl_PopCallFrame(interp); }