public class PropagationSystem extends DefaultFixedPointSolver<PointsToSetVariable>
AbstractFixedPointSolver.Statement
Modifier and Type | Field and Description |
---|---|
protected CallGraph |
cg
Governing call graph;
|
protected MutableMapping<InstanceKey> |
instanceKeys
bijection from InstanceKey <=>Integer
|
protected PointsToMap |
pointsToMap
object that tracks points-to sets
|
DEFAULT_PERIODIC_MAINTENANCE_INTERVAL, DEFAULT_VERBOSE_INTERVAL, verbose, workList
CHANGED, CHANGED_AND_FIXED, CHANGED_MASK, FIXED_MASK, NOT_CHANGED, NOT_CHANGED_AND_FIXED, SIDE_EFFECT_MASK
Constructor and Description |
---|
PropagationSystem(CallGraph cg,
PointerKeyFactory pointerKeyFactory,
InstanceKeyFactory instanceKeyFactory) |
addAllStatementsToWorkList, addToWorkList, changedVariable, emptyWorkList, getMaxEvalBetweenTopo, getMinSizeForTopSort, getNumberOfEvaluations, getStatements, getTopologicalGrowthFactor, incNumberOfEvaluations, initForFirstSolve, isChanged, isFixed, isSideEffect, lineBreak, newStatement, newStatement, newStatement, newStatement, newStatement, orderStatements, removeStatement, setMaxEvalBetweenTopo, setMinEquationsForTopSort, setTopologicalGrowthFactor, solve, toString
protected final PointsToMap pointsToMap
protected final MutableMapping<InstanceKey> instanceKeys
protected final CallGraph cg
public PropagationSystem(CallGraph cg, PointerKeyFactory pointerKeyFactory, InstanceKeyFactory instanceKeyFactory)
public PointerAnalysis<InstanceKey> makePointerAnalysis(PropagationCallGraphBuilder builder)
protected void registerFixedSet(PointsToSetVariable p, UnarySideEffect s)
protected void updateSideEffects(PointsToSetVariable p, PointsToSetVariable rep)
public IntSet getInstanceKeysForClass(IClass klass)
IllegalArgumentException
- if klass is nullpublic InstanceKey getInstanceKey(int i)
public int getInstanceIndex(InstanceKey ik)
protected void initializeVariables()
AbstractFixedPointSolver
initializeVariables
in class AbstractFixedPointSolver<PointsToSetVariable>
public void recordImplicitPointsToSet(PointerKey key)
public PointsToSetVariable findOrCreatePointsToSet(PointerKey key)
key
- public int findOrCreateIndexForInstanceKey(InstanceKey key)
public boolean newConstraint(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs)
public boolean newConstraint(PointerKey lhs, AbstractOperator<PointsToSetVariable> op, PointerKey rhs)
public boolean newConstraint(PointerKey lhs, AbstractOperator<PointsToSetVariable> op, PointerKey rhs1, PointerKey rhs2)
public boolean newFieldWrite(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs, PointerKey container)
public boolean newFieldRead(PointerKey lhs, UnaryOperator<PointsToSetVariable> op, PointerKey rhs, PointerKey container)
public boolean newConstraint(PointerKey lhs, InstanceKey value)
public void newSideEffect(UnaryOperator<PointsToSetVariable> op, PointerKey arg0)
public void newSideEffect(AbstractOperator<PointsToSetVariable> op, PointerKey[] arg0)
public void newSideEffect(AbstractOperator<PointsToSetVariable> op, PointerKey arg0, PointerKey arg1)
protected void initializeWorkList()
AbstractFixedPointSolver
initializeWorkList
in class AbstractFixedPointSolver<PointsToSetVariable>
public PointerAnalysis<InstanceKey> extractPointerAnalysis(PropagationCallGraphBuilder builder)
public void performVerboseAction()
VerboseAction
performVerboseAction
in interface VerboseAction
performVerboseAction
in class AbstractFixedPointSolver<PointsToSetVariable>
public IFixedPointSystem<PointsToSetVariable> getFixedPointSystem()
getFixedPointSystem
in interface IFixedPointSolver<PointsToSetVariable>
getFixedPointSystem
in class DefaultFixedPointSolver<PointsToSetVariable>
IFixedPointSolver
public Iterator<PointerKey> iteratePointerKeys()
public int getNumberOfPointerKeys()
public Iterator<AbstractStatement> getStatementsThatUse(PointsToSetVariable v)
public Iterator<AbstractStatement> getStatementsThatDef(PointsToSetVariable v)
public NumberedGraph<PointsToSetVariable> getAssignmentGraph()
public Graph<PointsToSetVariable> getFilterAsssignmentGraph()
public Graph<PointsToSetVariable> getFlowGraphIncludingImplicitConstraints()
public void revertToPreTransitive()
public Iterator getTransitiveRoots()
public boolean isTransitiveRoot(PointerKey key)
protected void periodicMaintenance()
AbstractFixedPointSolver
periodicMaintenance
in class AbstractFixedPointSolver<PointsToSetVariable>
public int getVerboseInterval()
AbstractFixedPointSolver
getVerboseInterval
in class AbstractFixedPointSolver<PointsToSetVariable>
public void setVerboseInterval(int verboseInterval)
verboseInterval
- The verboseInterval to set.public int getPeriodicMaintainInterval()
AbstractFixedPointSolver
getPeriodicMaintainInterval
in class AbstractFixedPointSolver<PointsToSetVariable>
public void setPeriodicMaintainInterval(int periodicMaintainInteval)
periodicMaintainInteval
- public void unify(IntSet s)
s
- numbers of points-to-set variablesIllegalArgumentException
- if s is nullpublic boolean isUnified(PointerKey result)
public int getNumber(PointerKey p)
protected PointsToSetVariable[] makeStmtRHS(int size)
makeStmtRHS
in class AbstractFixedPointSolver<PointsToSetVariable>