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;
}
}