diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java index ca9c06cd1..5eb5f4adc 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/PartiallyBalancedTabulationSolver.java @@ -16,6 +16,7 @@ import java.util.Iterator; import org.eclipse.core.runtime.IProgressMonitor; import com.ibm.wala.util.collections.HashSetFactory; +import com.ibm.wala.util.collections.Pair; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.intset.IntIterator; import com.ibm.wala.util.intset.IntSet; @@ -33,7 +34,7 @@ public class PartiallyBalancedTabulationSolver extends TabulationSolver(p, monitor); } - private final Collection

seedProcedures = HashSetFactory.make(); + private final Collection> unbalancedSeeds = HashSetFactory.make(); protected PartiallyBalancedTabulationSolver(PartiallyBalancedTabulationProblem p, IProgressMonitor monitor) { super(p, monitor); @@ -42,7 +43,7 @@ public class PartiallyBalancedTabulationSolver extends TabulationSolver it2 = supergraph.getSuccNodes(n); it2.hasNext();) { @@ -71,18 +72,16 @@ public class PartiallyBalancedTabulationSolver extends TabulationSolver seed) { - seedProcedures.add(getSupergraph().getProcOf(seed.entry)); + unbalancedSeeds.add(Pair.make(seed.entry, seed.d1)); super.addSeed(seed); } /** - * Is n an exit from a procedure from which a seed originated + * Was the fact number i named at node s_p introduced as an "unbalanced" seed during partial tabulation? + * If so, any facts "reached" from here can be further propagated with unbalanced parens. */ - private boolean isExitFromSeedMethod(T n) { - if (getSupergraph().isExit(n) && seedProcedures.contains(getSupergraph().getProcOf(n))) { - return true; - } - return false; + private boolean wasUsedAsUnbalancedSeed(T s_p, int i) { + return unbalancedSeeds.contains(Pair.make(s_p, i)); } }