ArrayTypeNode.java

package edu.udel.cis.vsl.tass.ast.impl.type;

import java.io.PrintWriter;
import java.util.NoSuchElementException;

import edu.udel.cis.vsl.tass.ast.IF.ASTNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.expression.ExpressionNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.type.ArrayTypeNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.type.TypeNodeIF;
import edu.udel.cis.vsl.tass.ast.impl.ASTNode;

public class ArrayTypeNode extends ASTNode implements ArrayTypeNodeIF {

	private TypeNodeIF elementType;
	private ExpressionNodeIF extent;

	public ArrayTypeNode(long id) {
		super(id);
	}
	
	public ArrayTypeNode(long id, TypeNodeIF elementType) {
		super(id);
		this.elementType = elementType;
	}

	public ArrayTypeNode(long id, TypeNodeIF elementType, ExpressionNodeIF extent) {
		super(id);
		this.elementType = elementType;
		this.extent = extent;
	}

	@Override
	public TypeNodeIF elementType() {
		return elementType;
	}

	@Override
	public ExpressionNodeIF extent() {
		return extent;
	}

	@Override
	public void setElementType(TypeNodeIF elementType) {
		this.elementType = elementType;
	}

	@Override
	public void setExtent(ExpressionNodeIF extent) {
		this.extent = extent;
	}

	@Override
	public int numChildren() {
		return 2;
	}

	@Override
	public void setChild(int i, ASTNodeIF child) throws NoSuchElementException {
		switch (i) {
		case 0:
			elementType = (TypeNodeIF) child;
			break;
		case 1:
			extent = (ExpressionNodeIF) child;
			break;
		default:
			throw new NoSuchElementException("Node " + id()
					+ " does not have a child with index " + i + ".");
		}
	}

	@Override
	public ASTNodeIF child(int index) throws NoSuchElementException {
		switch (index) {
		case 0:
			return elementType;
		case 1:
			return extent;
		default:
			throw new NoSuchElementException("Node " + id()
					+ " does not have a child with index " + index + ".");
		}
	}

	@Override
	public String toString() {
		if (extent != null)
			return elementType.toString() + "[" + extent.toString() + "]";
		else
			return elementType.toString() + "[]";
	}

	@Override
	public void print(String prefix, PrintWriter out) {
		out.println(prefix + " AST Node " + id() + ", Array Type");
		elementType.print(prefix + "|", out);
		if (extent != null)
			extent.print(prefix + "|", out);
	}

}