Posted to tcl by patthoyts at Sun Jul 06 23:07:32 GMT 2008view raw
- static int
- BackgroundEvalObjv(Tcl_Interp *interp,
- int objc, Tcl_Obj *const *objv, int flags)
- {
- Tcl_DString errorInfo, errorCode;
- Tcl_SavedResult state;
- int r = TCL_OK;
- Tcl_DStringInit(&errorInfo);
- Tcl_DStringInit(&errorCode);
- /*
- * Record the state of the interpreter
- */
- Tcl_SaveResult(interp, &state);
- Tcl_DStringAppend(&errorInfo,
- Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY), -1);
- Tcl_DStringAppend(&errorCode,
- Tcl_GetVar(interp, "errorCode", TCL_GLOBAL_ONLY), -1);
- /*
- * Evaluate the command and handle any error.
- */
- r = Tcl_EvalObjv(interp, objc, objv, flags);
- if (r == TCL_ERROR) {
- Tcl_AddErrorInfo(interp, "\n (background event handler)");
- Tcl_BackgroundError(interp);
- }
- /*
- * Restore the state of the interpreter
- */
- Tcl_SetVar(interp, "errorInfo",
- Tcl_DStringValue(&errorInfo), TCL_GLOBAL_ONLY);
- Tcl_SetVar(interp, "errorCode",
- Tcl_DStringValue(&errorCode), TCL_GLOBAL_ONLY);
- Tcl_RestoreResult(interp, &state);
- /*
- * Clean up references.
- */
- Tcl_DStringFree(&errorInfo);
- Tcl_DStringFree(&errorCode);
- return r;
- }