Posted to tcl by APN at Mon Jul 26 15:35:32 GMT 2010view raw
- Tcl_CatchObjCmd(dummy, interp, objc, objv)
- 231 ClientData dummy; /* Not used. */
- 232 Tcl_Interp *interp; /* Current interpreter. */
- 233 int objc; /* Number of arguments. */
- 234 Tcl_Obj *CONST objv[]; /* Argument objects. */
- 235 {
- 236 Tcl_Obj *varNamePtr = NULL;
- 237 int result;
- 238
- 239 if ((objc != 2) && (objc != 3)) {
- 240 Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
- 241 return TCL_ERROR;
- 242 }
- 243
- 244 /*
- 245 * Save a pointer to the variable name object, if any, in case the
- 246 * Tcl_EvalObj reallocates the bytecode interpreter's evaluation
- 247 * stack rendering objv invalid.
- 248 */
- 249
- 250 if (objc == 3) {
- 251 varNamePtr = objv[2];
- 252 }
- 253
- 254 result = Tcl_EvalObjEx(interp, objv[1], 0);
- 255
- 256 if (objc == 3) {
- 257 if (Tcl_ObjSetVar2(interp, varNamePtr, NULL,
- 258 Tcl_GetObjResult(interp), 0) == NULL) {
- 259 Tcl_ResetResult(interp);
- 260 Tcl_AppendToObj(Tcl_GetObjResult(interp),
- 261 "couldn't save command result in variable", -1);
- 262 return TCL_ERROR;
- 263 }
- 264 }
- 265
- 266 /*
- 267 * Set the interpreter's object result to an integer object holding the
- 268 * integer Tcl_EvalObj result. Note that we don't bother generating a
- 269 * string representation. We reset the interpreter's object result
- 270 * to an unshared empty object and then set it to be an integer object.
- 271 */
- 272
- 273 Tcl_ResetResult(interp);
- 274 Tcl_SetIntObj(Tcl_GetObjResult(interp), result);
- 275 return TCL_OK;
- 276 }
- 277