public abstract class BackwardBoomerangSolver<W extends wpds.impl.Weight> extends AbstractBoomerangSolver<W>
cfg, dataFlowScope, generatedFieldState, icfg, INTERPROCEDURAL, options, perStatementFieldTransitions, type| Constructor and Description |
|---|
BackwardBoomerangSolver(ObservableICFG<Statement,Method> icfg,
ObservableControlFlowGraph cfg,
Map<Map.Entry<sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>,Field>,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>> genField,
BackwardQuery query,
BoomerangOptions options,
wpds.impl.NestedWeightedPAutomatons<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>,W> callSummaries,
wpds.impl.NestedWeightedPAutomatons<Field,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>,W> fieldSummaries,
DataFlowScope scope,
IBackwardFlowFunction backwardFlowFunction,
com.google.common.collect.Multimap<Field,Statement> fieldLoadStatements,
com.google.common.collect.Multimap<Field,Statement> fieldStoreStatements,
Type propagationType) |
| Modifier and Type | Method and Description |
|---|---|
void |
applyCallSummary(ControlFlowGraph.Edge callSiteEdge,
Val factAtSpInCallee,
ControlFlowGraph.Edge spInCallee,
ControlFlowGraph.Edge exitStmt,
Val exitingFact) |
protected void |
callFlow(Method caller,
sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> curr,
Statement callSite) |
protected Collection<? extends wpds.interfaces.State> |
computeCallFlow(ControlFlowGraph.Edge callSiteEdge,
Val fact,
Method callee,
ControlFlowGraph.Edge calleeStartEdge) |
protected Collection<wpds.interfaces.State> |
computeNormalFlow(Method method,
ControlFlowGraph.Edge currEdge,
Val fact) |
protected Collection<? extends wpds.interfaces.State> |
computeReturnFlow(Method method,
Statement callerReturnStatement,
Val value) |
void |
computeSuccessor(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> node) |
sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>> |
generateFieldState(sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>> d,
Field loc) |
protected void |
normalFlow(Method method,
sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode) |
void |
processPush(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> curr,
wpds.interfaces.Location location,
sync.pds.solver.nodes.PushNode<ControlFlowGraph.Edge,Val,?> succ,
sync.pds.solver.SyncPDSSolver.PDSSystem system) |
protected void |
propagateUnbalancedToCallSite(Statement callSite,
wpds.impl.Transition<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>> transInCallee) |
String |
toString() |
addCallRule, addFieldRule, addPotentialUnbalancedFlow, allowUnbalanced, asStatementValWeightTable, createQueryNodeField, debugFieldAutomaton, emptyField, epsilonField, epsilonStmt, exclusionFieldWildCard, fieldWildCard, forceUnbalanced, getCallAutomaton, getCallPDS, getFieldAutomaton, getFieldPDS, getNumberOfRules, getResults, getResultsAt, isMatchingCallSiteCalleePair, preventCallTransitionAdd, preventFieldTransitionAdd, reachesNodeWithEmptyField, registerFieldTransitionListener, registerStatementCallTransitionListener, registerStatementFieldTransitionListener, returnFlow, synchedEmptyStackReachable, synchedReachable, unregisterAllListenersaddApplySummaryListener, addGeneratedFieldState, addNormalCallFlow, addNormalFieldFlow, asFieldFact, debugOutput, generateCallState, getCallWeights, getFieldWeights, getReachedStates, processNode, processNormal, processPop, propagate, registerListener, registerListener, solve, solve, wrappublic BackwardBoomerangSolver(ObservableICFG<Statement,Method> icfg, ObservableControlFlowGraph cfg, Map<Map.Entry<sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>,Field>,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>> genField, BackwardQuery query, BoomerangOptions options, wpds.impl.NestedWeightedPAutomatons<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>,W> callSummaries, wpds.impl.NestedWeightedPAutomatons<Field,sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>>,W> fieldSummaries, DataFlowScope scope, IBackwardFlowFunction backwardFlowFunction, com.google.common.collect.Multimap<Field,Statement> fieldLoadStatements, com.google.common.collect.Multimap<Field,Statement> fieldStoreStatements, Type propagationType)
public sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>> generateFieldState(sync.pds.solver.nodes.INode<sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val>> d, Field loc)
generateFieldState in class AbstractBoomerangSolver<W extends wpds.impl.Weight>protected Collection<? extends wpds.interfaces.State> computeReturnFlow(Method method, Statement callerReturnStatement, Val value)
computeReturnFlow in class AbstractBoomerangSolver<W extends wpds.impl.Weight>protected void callFlow(Method caller, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> curr, Statement callSite)
public void computeSuccessor(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> node)
computeSuccessor in class sync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>protected void normalFlow(Method method, sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> currNode)
protected Collection<? extends wpds.interfaces.State> computeCallFlow(ControlFlowGraph.Edge callSiteEdge, Val fact, Method callee, ControlFlowGraph.Edge calleeStartEdge)
public void processPush(sync.pds.solver.nodes.Node<ControlFlowGraph.Edge,Val> curr, wpds.interfaces.Location location, sync.pds.solver.nodes.PushNode<ControlFlowGraph.Edge,Val,?> succ, sync.pds.solver.SyncPDSSolver.PDSSystem system)
processPush in class sync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>protected Collection<wpds.interfaces.State> computeNormalFlow(Method method, ControlFlowGraph.Edge currEdge, Val fact)
computeNormalFlow in class AbstractBoomerangSolver<W extends wpds.impl.Weight>public void applyCallSummary(ControlFlowGraph.Edge callSiteEdge, Val factAtSpInCallee, ControlFlowGraph.Edge spInCallee, ControlFlowGraph.Edge exitStmt, Val exitingFact)
applyCallSummary in class sync.pds.solver.SyncPDSSolver<ControlFlowGraph.Edge,Val,Field,W extends wpds.impl.Weight>protected void propagateUnbalancedToCallSite(Statement callSite, wpds.impl.Transition<ControlFlowGraph.Edge,sync.pds.solver.nodes.INode<Val>> transInCallee)
propagateUnbalancedToCallSite in class AbstractBoomerangSolver<W extends wpds.impl.Weight>Copyright © 2024. All rights reserved.