EnumElementReferenceNode.java

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

import edu.udel.cis.vsl.tass.ast.IF.ASTNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.IdentifierNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.PairNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.expression.EnumElementReferenceNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.expression.LiteralNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.type.TypeNodeIF;

/**
 * A reference to an enumerated value.
 * 
 * @author Timothy K. Zirkel (zirkel)
 * 
 */
public class EnumElementReferenceNode extends LiteralNode implements
		EnumElementReferenceNodeIF {

	private PairNodeIF<IdentifierNodeIF, LiteralNodeIF> referent;

	public EnumElementReferenceNode(long id) {
		super(id);
	}
	
	/**
	 * A reference to an enumerated value. The identifer is the name of the
	 * reference, the parameter type is the type of the node, and the parameter
	 * referent is the pairing of the enumerated type name to the corresponding
	 * literal.
	 */
	public EnumElementReferenceNode(long id, IdentifierNodeIF identifier,
			TypeNodeIF type,
			PairNodeIF<IdentifierNodeIF, LiteralNodeIF> referent) {
		super(id, identifier, type);
		this.referent = referent;
	}

	@Override
	public void setReferent(ASTNodeIF referent) {
		// TODO: Handle this properly. This should never be called
		assert false;
	}

	@Override
	public String name() {
		return super.identifier().name();
	}

	@Override
	public void setName(String name) {
		super.identifier().setName(name);
	}

	@Override
	public PairNodeIF<IdentifierNodeIF, LiteralNodeIF> referent() {
		return referent;
	}

	@Override
	public void setReferent(PairNodeIF<IdentifierNodeIF, LiteralNodeIF> referent) {
		this.referent = referent;
	}

}