/* Generated By:JJTree: Do not edit this line. ASTTerm.java */
/* JJT: 0.3pre1 */

package Mini;

/**
 *
 * @version $Id$
 * @author  <A HREF="http://www.berlin.de/~markus.dahm/">M. Dahm</A>
 */
public class ASTTerm extends ASTExpr {
  // Generated methods
  ASTTerm(int id) {
    super(id);
  }

  ASTTerm(MiniParser p, int id) {
    super(p, id);
  }

  public static Node jjtCreate(MiniParser p, int id) {
    return new ASTTerm(p, id);
  }

  // Inherited closeNode(), dump()

  /**
   * Drop this node, if kind == -1, because then it has just one child node
   * and may be safely replaced with it.
   */
  public ASTExpr traverse(Environment env) {
    if(kind == -1) // Drop it
      return exprs[0].traverse(env);
    else           // Or convert it to Expr node, copy children
      return new ASTExpr(exprs, kind, line, column).traverse(env);
  }
}
