Posted to tcl by APN at Mon Jul 26 15:35:32 GMT 2010view pretty

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