void XOTclStackDump(Tcl_Interp *interp) { Interp *iPtr = (Interp *)interp; CallFrame *f = iPtr->framePtr, *v = iPtr->varFramePtr; Tcl_Obj *varCmdObj; XOTclNewObj(varCmdObj); fprintf (stderr, " TCL STACK:\n"); if (f == 0) fprintf(stderr, "- "); while (f) { Tcl_Obj *cmdObj; XOTclNewObj(cmdObj); fprintf(stderr, "\tFrame=%p ", f); if (f && f->isProcCallFrame && f->procPtr && f->procPtr->cmdPtr) { fprintf(stderr,"caller %p ",Tcl_CallFrame_callerPtr(f)); fprintf(stderr,"callerV %p ",Tcl_CallFrame_callerVarPtr(f)); Tcl_GetCommandFullName(interp, (Tcl_Command) f->procPtr->cmdPtr, cmdObj); fprintf(stderr, "%s (%p) lvl=%d\n", ObjStr(cmdObj), f->procPtr->cmdPtr, f->level); DECR_REF_COUNT(cmdObj); } else fprintf(stderr, "- \n"); f = f->callerPtr; } fprintf (stderr, " VARFRAME:\n"); fprintf(stderr, "\tFrame=%p", v); if (v) {fprintf(stderr, "caller %p", v->callerPtr);} if (v && v->isProcCallFrame && v->procPtr && v->procPtr->cmdPtr) { Tcl_GetCommandFullName(interp, (Tcl_Command) v->procPtr->cmdPtr, varCmdObj); if (varCmdObj) { fprintf(stderr, " %s (%d)\n", ObjStr(varCmdObj), v->level); } } else fprintf(stderr, "- \n"); DECR_REF_COUNT(varCmdObj); }
void NsfStackDump(Tcl_Interp *interp) { Interp *iPtr = (Interp *)interp; CallFrame *f, *v; Tcl_Obj *varCmdObj; nonnull_assert(interp != NULL); f = iPtr->framePtr; v = iPtr->varFramePtr; varCmdObj = Tcl_NewObj(); fprintf (stderr, " TCL STACK:\n"); if (f == 0) { fprintf(stderr, "- "); } while (f) { Tcl_Obj *cmdObj = Tcl_NewObj(); fprintf(stderr, "\tFrame=%p ", (void *)f); if (f && f->isProcCallFrame && f->procPtr && f->procPtr->cmdPtr) { fprintf(stderr,"caller %p ", (void *)Tcl_CallFrame_callerPtr(f)); fprintf(stderr,"callerV %p ", (void *)Tcl_CallFrame_callerVarPtr(f)); Tcl_GetCommandFullName(interp, (Tcl_Command)f->procPtr->cmdPtr, cmdObj); fprintf(stderr, "%s (%p) lvl=%d\n", ObjStr(cmdObj), (void *)f->procPtr->cmdPtr, f->level); } else { if (f && f->varTablePtr) { fprintf(stderr, "var_table = %p ", (void *)f->varTablePtr); } fprintf(stderr, "- \n"); } DECR_REF_COUNT(cmdObj); f = f->callerPtr; } fprintf (stderr, " VARFRAME:\n"); fprintf(stderr, "\tFrame=%p ", (void *)v); if (v != NULL) { fprintf(stderr, "caller %p var_table %p ", (void *)v->callerPtr, (void *)v->varTablePtr); /* if (v->varTablePtr != NULL) panic(0, "testing");*/ } if (v != NULL && v->isProcCallFrame && v->procPtr && v->procPtr->cmdPtr) { Tcl_GetCommandFullName(interp, (Tcl_Command) v->procPtr->cmdPtr, varCmdObj); fprintf(stderr, " %s (%d)\n", ObjStr(varCmdObj), v->level); } else { fprintf(stderr, "- \n"); } DECR_REF_COUNT(varCmdObj); }
LUA_OBJ_METHOD static void close_timer(luaw_timer_t* timer) { /* timer->lua_ref == NULL also acts as a flag to mark that this timer has been closed */ if ((timer == NULL)||(timer->lua_ref == NULL)) return; *(timer->lua_ref) = NULL; //delink from Lua's userdata timer->lua_ref = NULL; DECR_REF_COUNT(timer); /* unblock waiting thread */ if (timer->lua_tid) { lua_rawgeti(l_global, LUA_REGISTRYINDEX, resume_thread_fn_ref); lua_pushinteger(l_global, timer->lua_tid); lua_pushboolean(l_global, 0); //status lua_pushstring(l_global, uv_strerror(UV_ECANCELED)); //error message timer->lua_tid = 0; resume_lua_thread(l_global, 3, 2, 0); } close_if_active((uv_handle_t*)&timer->handle, free_user_timer); }