ExprTriple.java

package edu.udel.cis.vsl.abc.transform.common;

import java.util.List;

import edu.udel.cis.vsl.abc.ast.node.IF.ASTNode;
import edu.udel.cis.vsl.abc.ast.node.IF.expression.ExpressionNode;
import edu.udel.cis.vsl.abc.ast.node.IF.statement.BlockItemNode;

/**
 * An ExprTriple is an SETriple for which the node is an expression, i.e.,
 * instance of ExpressionNode.
 * 
 * @author zirkel
 */
public class ExprTriple extends SETriple {

	/**
	 * 
	 * @param before
	 *            The block items that come before this expression.
	 * @param expression
	 *            The side effect free expression.
	 * @param after
	 *            The block items that come after this expression.
	 */
	public ExprTriple(List<BlockItemNode> before, ExpressionNode expression,
			List<BlockItemNode> after) {
		super(before, expression, after);
	}

	public ExprTriple(ExpressionNode expression) {
		super(expression);
	}

	/**
	 * @return the expression.
	 */
	@Override
	public ExpressionNode getNode() {
		return (ExpressionNode) node;
	}

	/**
	 * @param expression
	 *            The side effect free expression.
	 */
	@Override
	public void setNode(ASTNode expression) {
		if (expression != null) {
			assert expression instanceof ExpressionNode;
			expression.remove();
		}
		this.node = expression;
	}
}