1 19 20 25 26 27 28 35 36 package soot.toolkits.scalar; 37 38 import soot.*; 39 import soot.toolkits.graph.*; 40 import soot.util.*; 41 import java.util.*; 42 43 50 public abstract class BranchedFlowAnalysis extends AbstractFlowAnalysis 51 { 52 53 protected Map unitToAfterFallFlow; 54 protected Map unitToAfterBranchFlow; 55 56 public BranchedFlowAnalysis(UnitGraph graph) 57 { 58 super(graph); 59 60 unitToAfterFallFlow = new HashMap(graph.size() * 2 + 1, 0.7f); 61 unitToAfterBranchFlow = new HashMap(graph.size() * 2 + 1, 0.7f); 62 } 63 64 67 protected abstract void flowThrough(Object in, Unit s, 68 List fallOut, List branchOuts); 69 70 public Object getFallFlowAfter(Unit s) 71 { 72 List fl = (List) unitToAfterFallFlow.get(s); 73 74 if (fl.isEmpty()) 75 return newInitialFlow(); 76 else 77 return fl.get(0); 78 } 79 80 81 public List getBranchFlowAfter(Unit s) 82 { 83 return (List) (unitToAfterBranchFlow.get(s)); 84 } 85 86 public Object getFlowBefore(Unit s) 87 { 88 return unitToBeforeFlow.get(s); 89 } 90 } 92 | Popular Tags |