Index: generic/xotclStack.c =================================================================== diff -u -ra19d77bc89cdb0882d2cad69305be4e0e483cae3 -red8301802df5fc7427fc0e4dbd82c2cf880329de --- generic/xotclStack.c (.../xotclStack.c) (revision a19d77bc89cdb0882d2cad69305be4e0e483cae3) +++ generic/xotclStack.c (.../xotclStack.c) (revision ed8301802df5fc7427fc0e4dbd82c2cf880329de) @@ -28,6 +28,12 @@ return top; } +XOTCLINLINE static XOTclCallStackContent* +CallStackGetTopFrame(Tcl_Interp *interp) { + XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs; + return cs->top; +} + static void CallStackClearCmdReferences(Tcl_Interp *interp, Tcl_Command cmd) { XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs; @@ -40,6 +46,19 @@ } } +static XOTclCallStackContent* +CallStackGetObjectFrame(Tcl_Interp *interp, XOTclObject *obj) { + XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs; + XOTclCallStackContent *csc = CallStackGetTopFrame(interp); + + for (; csc >= cs->content; csc--) { + if (csc->self == obj) { + return csc; + } + } + return NULL; +} + static int CallStackMarkDestroyed(Tcl_Interp *interp, XOTclObject *obj) { XOTclCallStack *cs = &RUNTIME_STATE(interp)->cs;