NullReferenceValue.java

package edu.udel.cis.vsl.tass.dynamic.impl.value;

import edu.udel.cis.vsl.tass.dynamic.IF.type.ReferenceValueTypeIF;
import edu.udel.cis.vsl.tass.dynamic.IF.value.VariableReferenceValueIF;
import edu.udel.cis.vsl.tass.morph.Morphic;

/**
 * Represents a null pointer value. There is one such null value for every
 * pointer type.
 */
public class NullReferenceValue extends ReferenceValue {

	private static int classHashCode = NullReferenceValue.class.hashCode();

	public NullReferenceValue(ReferenceValueTypeIF referenceType) {
		super(null, referenceType);
	}

	@Override
	protected int computeHashCode() {
		return super.computeHashCode() + classHashCode;
	}

	@Override
	public VariableReferenceValueIF variableReference() {
		return null;
	}

	@Override
	protected boolean computeEquals(Morphic component) {
		return component instanceof NullReferenceValue
				&& super.computeEquals(component);
	}

	@Override
	public String toString() {
		String typeString = valueType().toString();

		if (!"void*".equals(typeString))
			return "(" + typeString + ")NULL";
		else
			return "NULL";

	}

	@Override
	public boolean isNull() {
		return true;
	}
}