CommonStringValue.java

package edu.udel.cis.vsl.abc.ast.value.common;

import edu.udel.cis.vsl.abc.ast.type.IF.ArrayType;
import edu.udel.cis.vsl.abc.ast.value.IF.StringValue;
import edu.udel.cis.vsl.abc.ast.value.IF.ValueFactory.Answer;
import edu.udel.cis.vsl.abc.token.IF.StringLiteral;

public class CommonStringValue extends CommonValue implements StringValue {

	private final static int classCode = CommonStringValue.class.hashCode();

	private StringLiteral literal;

	public CommonStringValue(ArrayType stringType, StringLiteral literal) {
		super(stringType);
		assert literal != null;
		this.literal = literal;
	}

	@Override
	public ArrayType getType() {
		return (ArrayType) super.getType();
	}

	@Override
	public boolean equals(Object object) {
		if (object == this)
			return true;
		if (object instanceof CommonStringValue) {
			CommonStringValue that = (CommonStringValue) object;

			return getType().equals(that.getType())
					&& literal.equals(that.literal);
		}
		return false;
	}

	@Override
	public int hashCode() {
		return classCode + literal.hashCode();
	}

	@Override
	public StringLiteral getLiteral() {
		return literal;
	}

	@Override
	public Answer isZero() {
		throw new RuntimeException("Cannot ask if string is 0");
	}

	@Override
	public String toString() {
		return literal.toString();
	}
}