SwitchStatementNode.java

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

import edu.udel.cis.vsl.tass.ast.IF.LabelReferenceNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.PairNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.SequenceNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.expression.ExpressionNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.statement.StatementNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.statement.SwitchStatementNodeIF;

/**
 * A switch statement.
 * 
 * @author Timothy K. Zirkel (zirkel)
 * 
 */
public class SwitchStatementNode extends StatementNode implements
		SwitchStatementNodeIF {

	private ExpressionNodeIF expression;
	private SequenceNodeIF<PairNodeIF<ExpressionNodeIF, LabelReferenceNodeIF>> cases;
	private LabelReferenceNodeIF defaultCase;
	private StatementNodeIF body;

	public SwitchStatementNode(long id) {
		super(id);
	}
	
	/**
	 * A switch statement. The parameter expression is the evaluated expression
	 * for the switch. The parameter cases gives sets of parings of values the
	 * switch expression might match and labels for the corresponding point in
	 * the switch statement body. The parameter defaultCase gives the label for
	 * where to go when no other cases are matched. The body is the whole body
	 * of the switch statement, including appropriate labels.
	 */
	public SwitchStatementNode(
			long id,
			ExpressionNodeIF expression,
			SequenceNodeIF<PairNodeIF<ExpressionNodeIF, LabelReferenceNodeIF>> cases,
			LabelReferenceNodeIF defaultCase, StatementNodeIF body) {
		super(id);
		this.expression = expression;
		this.cases = cases;
		this.defaultCase = defaultCase;
		this.body = body;
	}

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

	@Override
	public SequenceNodeIF<PairNodeIF<ExpressionNodeIF, LabelReferenceNodeIF>> cases() {
		return cases;
	}

	@Override
	public LabelReferenceNodeIF defaultCase() {
		return defaultCase;
	}

	@Override
	public StatementNodeIF body() {
		return body;
	}

	@Override
	public void setExpression(ExpressionNodeIF expression) {
		this.expression = expression;
	}

	@Override
	public void setCases(
			SequenceNodeIF<PairNodeIF<ExpressionNodeIF, LabelReferenceNodeIF>> cases) {
		this.cases = cases;
	}

	@Override
	public void setDefaultCase(LabelReferenceNodeIF defaultCase) {
		this.defaultCase = defaultCase;
	}

	@Override
	public void setBody(StatementNodeIF body) {
		this.body = body;
	}

}