/* * CatchCmd.java * * Copyright (c) 1997 Cornell University. * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and * redistribution of this file, and for a DISCLAIMER OF ALL * WARRANTIES. * * Included in SQLite3 port to C# for use in testharness only; 2008 Noah B Hart * * RCS @(#) $Id: CatchCmd.java,v 1.2 2000/08/20 06:08:42 mo Exp $ * */ using System; namespace tcl.lang { /// This class implements the built-in "catch" command in Tcl. class CatchCmd : Command { /// This procedure is invoked to process the "catch" Tcl command. /// See the user documentation for details on what it does. /// /// /// the current interpreter. /// /// command arguments. /// /// TclException if wrong number of arguments. /// public TCL.CompletionCode cmdProc( Interp interp, TclObject[] argv ) { if ( argv.Length != 2 && argv.Length != 3 ) { throw new TclNumArgsException( interp, 1, argv, "command ?varName?" ); } TclObject result; TCL.CompletionCode code = TCL.CompletionCode.OK; try { interp.eval( argv[1], 0 ); } catch ( TclException e ) { code = e.getCompletionCode(); } result = interp.getResult(); if ( argv.Length == 3 ) { try { interp.setVar( argv[2], result, 0 ); } catch ( TclException e ) { throw new TclException( interp, "couldn't save command result in variable" ); } } interp.resetResult(); interp.setResult( TclInteger.newInstance( (int)code ) ); return TCL.CompletionCode.RETURN; } } }