Index: generic/xotclStack.c =================================================================== diff -u -ra6f0c9f2a438c7dcbe003698032aefb6a77f0199 -rec939a7b02581cdfc2a0c6fdf9393b2c83030207 --- generic/xotclStack.c (.../xotclStack.c) (revision a6f0c9f2a438c7dcbe003698032aefb6a77f0199) +++ generic/xotclStack.c (.../xotclStack.c) (revision ec939a7b02581cdfc2a0c6fdf9393b2c83030207) @@ -243,4 +243,22 @@ obj->flags &= ~XOTCL_DESTROY_CALLED; } +/* + * Pop any callstack entry that is still alive (e.g. + * if "exit" is called and we were jumping out of the + * callframe + */ +void CallStackPopAll(Tcl_Interp *interp) { + XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs; + + while (cs->top > cs->content) + CallStackPop(interp); + + while (1) { + Tcl_CallFrame *framePtr = Tcl_Interp_framePtr(interp); + if (!framePtr) break; + if (Tcl_CallFrame_level(framePtr) == 0) break; + Tcl_PopCallFrame(interp); + } +} #endif /* NOT TCL85STACK */