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

package Mini;

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

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

  public static Node jjtCreate(MiniParser p, int id) {
    return new ASTFactor(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);
  }
}
