wasCSharpSQLite – Rev 1

Subversion Repositories:
Rev:
/*
* TclException.java --
*
*       This file defines the TclException class used by Tcl to report
*       generic script-level errors and exceptions.
*
* 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: TclException.java,v 1.2 2000/04/03 14:09:11 mo Exp $
*
*/
using System;
namespace tcl.lang
{

  /*
  * TclException is used to interrupt the Tcl script currently being
  * interpreted by the Tcl Interpreter. Usually, a TclException is thrown
  * to indicate a script level error, e.g.:
  *
  *     - A syntax error occurred in a script.
  *     - A unknown variable is referenced.
  *     - A unknown command is executed.
  *     - A command is passed incorrected.
  *
  * A TclException can also be thrown by Tcl control structure commands such
  * as "return" and "continue" to change the flow of control in
  * a Tcl script.
  *
  * A TclException is accompanied by two pieces of information: the error
  * message and the completion code. The error message is a string stored in
  * the interpreter result. After a TclException is thrown and caught, the
  * error message can be queried by Interp.getResult().
  *
  * The completion code indicates why the TclException is generated. It is
  * stored in the compCode field of this class.
  */

  public class TclException : System.Exception
  {

    /*
    * Stores the completion code of a TclException.
    */

    private TCL.CompletionCode compCode;

    /*
    * An index that indicates where an error occurs inside a Tcl
    * string. This is used to add the offending command into the stack
    * trace.
    *
    * A negative value means the location of the index is unknown.
    *
    * Currently this field is used only by the Jacl interpreter.
    */

    protected internal int errIndex;

    protected internal TclException( Interp interp, string msg, TCL.CompletionCode ccode, int idx )
      : base( msg )
    {
      if ( ccode == TCL.CompletionCode.OK )
      {
        throw new TclRuntimeError( "The reserved completion code TCL.CompletionCode.OK (0) cannot be used " + "in TclException" );
      }
      compCode = ccode;
      errIndex = idx;

      if ( interp != null && (System.Object)msg != null )
      {
        interp.setResult( msg );
      }
    }
    public TclException( TCL.CompletionCode ccode )
      : base()
    {
      if ( ccode == TCL.CompletionCode.OK )
      {
        throw new TclRuntimeError( "The reserved completion code TCL.CompletionCode.OK (0) cannot be used" );
      }
      compCode = ccode;
      errIndex = -1;
    }
    public TclException( Interp interp, string msg )
      : this( interp, msg, TCL.CompletionCode.ERROR, -1 )
    {
    }
    public TclException( Interp interp, string msg, TCL.CompletionCode ccode )
      : this( interp, msg, ccode, -1 )
    {
    }
    public TCL.CompletionCode getCompletionCode()
    {
      return compCode;
    }
    internal void setCompletionCode( TCL.CompletionCode ccode )
    // New completion code. 
    {
      if ( ccode == TCL.CompletionCode.OK )
      {
        throw new TclRuntimeError( "The reserved completion code TCL.CompletionCode.OK (0) cannot be used" );
      }
      compCode = ccode;
    }
  } // end TclException
}