CharacterValue.java

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

import edu.udel.cis.vsl.tass.dynamic.IF.type.ValueTypeIF;
import edu.udel.cis.vsl.tass.dynamic.impl.type.PrimitiveValueType;
import edu.udel.cis.vsl.tass.model.IF.type.TypeIF;
import edu.udel.cis.vsl.tass.symbolic.IF.SymbolicExpressionIF;

public class CharacterValue extends SymbolicValue {

	/** Supplementary information to be used for printing. May be null. */
	private Character literal = null;

	/**
	 * The intrinsic value of the character object is the symbolic value
	 * symExpression. The extrinsic field literal is used just for printing a
	 * concrete character. It may be null.
	 */
	public CharacterValue(SymbolicExpressionIF symExpression,
			ValueTypeIF valueType, Character literal) {
		super(symExpression, valueType);
		assert valueType instanceof PrimitiveValueType
				&& ((PrimitiveValueType) valueType).type().kind() == TypeIF.TypeKind.CHAR;
		assert symExpression.type().isInteger();
		this.literal = literal;
	}

	@Override
	public String toString() {
		if (literal == null)
			return getSymbolicExpression().toString();
		return literal.toString();
	}
}