wasCSharpSQLite – Rev 1
?pathlinks?
/*
* UplevelCmd.java --
*
* Implements the "uplevel" command.
*
* 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: UplevelCmd.java,v 1.3 1999/07/12 02:38:53 mo Exp $
*
*/
using System;
namespace tcl.lang
{
/*
* This class implements the built-in "uplevel" command in Tcl.
*/
class UplevelCmd : Command
{
public TCL.CompletionCode cmdProc( Interp interp, TclObject[] objv )
{
string optLevel;
int result;
CallFrame savedVarFrame, frame;
int objc = objv.Length;
int objv_index;
TclObject cmd;
if ( objv.Length < 2 )
{
throw new TclNumArgsException( interp, 1, objv, "?level? command ?arg ...?" );
}
// Find the level to use for executing the command.
optLevel = objv[1].ToString();
// Java does not support passing a reference by refernece so use an array
CallFrame[] frameArr = new CallFrame[1];
result = CallFrame.getFrame( interp, optLevel, frameArr );
frame = frameArr[0];
objc -= ( result + 1 );
if ( objc == 0 )
{
throw new TclNumArgsException( interp, 1, objv, "?level? command ?arg ...?" );
}
objv_index = ( result + 1 );
// Modify the interpreter state to execute in the given frame.
savedVarFrame = interp.varFrame;
interp.varFrame = frame;
// Execute the residual arguments as a command.
if ( objc == 1 )
{
cmd = objv[objv_index];
}
else
{
cmd = TclString.newInstance( Util.concat( objv_index, objv.Length - 1, objv ) );
}
cmd.preserve();
try
{
interp.eval( cmd, 0 );
}
catch ( TclException e )
{
if ( e.getCompletionCode() == TCL.CompletionCode.ERROR )
{
interp.addErrorInfo( "\n (\"uplevel\" body line " + interp.errorLine + ")" );
}
throw;
}
finally
{
interp.varFrame = savedVarFrame;
cmd.release();
}
return TCL.CompletionCode.RETURN;
}
} // end UplevelCmd
}