Index: generic/xotcl.c =================================================================== diff -u -r721a118d34e93f4149da419436efa5b17bab9b35 -r4e4b28776b65781a8624006c026986add5080cb5 --- generic/xotcl.c (.../xotcl.c) (revision 721a118d34e93f4149da419436efa5b17bab9b35) +++ generic/xotcl.c (.../xotcl.c) (revision 4e4b28776b65781a8624006c026986add5080cb5) @@ -721,7 +721,6 @@ XOTCLINLINE static CONST char * GetSelfProc(Tcl_Interp *interp) { - /*return Tcl_GetCommandName(interp, RUNTIME_STATE(interp)->cs.top->cmdPtr);*/ return Tcl_GetCommandName(interp, CallStackGetFrame(interp)->cmdPtr); } @@ -1934,14 +1933,7 @@ static int XOTcl_DeleteCommandFromToken(Tcl_Interp *interp, Tcl_Command cmd) { - XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs; - XOTclCallStackContent *csc = cs->top; - - for (; csc > cs->content; csc--) { - if (csc->cmdPtr == cmd) { - csc->cmdPtr = NULL; - } - } + CallStackClearCmdReferences(interp, cmd); return Tcl_DeleteCommandFromToken(interp, cmd); } Index: generic/xotclStack.c =================================================================== diff -u -r721a118d34e93f4149da419436efa5b17bab9b35 -r4e4b28776b65781a8624006c026986add5080cb5 --- generic/xotclStack.c (.../xotclStack.c) (revision 721a118d34e93f4149da419436efa5b17bab9b35) +++ generic/xotclStack.c (.../xotclStack.c) (revision 4e4b28776b65781a8624006c026986add5080cb5) @@ -1,5 +1,10 @@ #if !defined(TCL85STACK) +XOTCLINLINE static XOTclObject* +GetSelfObj(Tcl_Interp *interp) { + return CallStackGetFrame(interp)->self; +} + static XOTclCallStackContent* CallStackGetFrame(Tcl_Interp *interp) { XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs; @@ -23,11 +28,17 @@ return top; } -XOTCLINLINE static XOTclObject* -GetSelfObj(Tcl_Interp *interp) { - return CallStackGetFrame(interp)->self; -} +static void +CallStackClearCmdReferences(Tcl_Interp *interp, Tcl_Command cmd) { + XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs; + XOTclCallStackContent *csc = cs->top; + for (; csc > cs->content; csc--) { + if (csc->cmdPtr == cmd) { + csc->cmdPtr = NULL; + } + } +} #endif /* TCL85STACK */ Index: generic/xotclStack85.c =================================================================== diff -u -r721a118d34e93f4149da419436efa5b17bab9b35 -r4e4b28776b65781a8624006c026986add5080cb5 --- generic/xotclStack85.c (.../xotclStack85.c) (revision 721a118d34e93f4149da419436efa5b17bab9b35) +++ generic/xotclStack85.c (.../xotclStack85.c) (revision 4e4b28776b65781a8624006c026986add5080cb5) @@ -50,6 +50,20 @@ return NULL; } +static void +CallStackClearCmdReferences(Tcl_Interp *interp, Tcl_Command cmd) { + register Tcl_CallFrame *varFramePtr = (Tcl_CallFrame *)Tcl_Interp_varFramePtr(interp); + + for (; varFramePtr; varFramePtr = Tcl_CallFrame_callerPtr(varFramePtr)) { + if (Tcl_CallFrame_isProcCallFrame(varFramePtr) & FRAME_IS_XOTCL_METHOD) { + XOTclCallStackContent *csc = (XOTclCallStackContent *)Tcl_CallFrame_clientData(varFramePtr); + if (csc->cmdPtr == cmd) { + csc->cmdPtr = NULL; + } + } + } +} + #endif /* TCL85STACK */