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