ReferenceSimplifier.java

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

import edu.udel.cis.vsl.tass.dynamic.IF.ValueSubstituterIF;
import edu.udel.cis.vsl.tass.dynamic.IF.simplify.MorphicSimplifierCacheIF;
import edu.udel.cis.vsl.tass.dynamic.IF.value.ValueIF;
import edu.udel.cis.vsl.tass.dynamic.impl.DynamicFactory;

/**
 * Like the substitution simplifier, but optimized for the case where all the
 * values in the substitution map are reference values. This can speed things up
 * considerably. It is appropriate for heap canonicalization.
 */
public class ReferenceSimplifier extends DynamicSimplifier {

	private ValueSubstituterIF substituter;

	public ReferenceSimplifier(ValueSubstituterIF substituter,
			DynamicFactory dynamicFactory, MorphicSimplifierCacheIF cache) {
		super(dynamicFactory, cache, false);
		this.substituter = substituter;
	}

	public ValueIF simplify(ValueIF value) {
		if (value.valueType().containsReferences())
			return substituter.substitute(value);
		else
			return value;
	}
}