1 19 20 package soot.jimple.spark.solver; 21 import soot.jimple.spark.*; 22 import soot.jimple.spark.pag.*; 23 import soot.*; 24 import soot.util.*; 25 import java.util.*; 26 import soot.jimple.spark.sets.PointsToSetInternal; 27 28 31 32 public class TopoSorter { 33 34 public void sort() { 35 for( Iterator it = pag.getVarNodeNumberer().iterator(); it.hasNext(); ) { 36 dfsVisit( (VarNode) it.next() ); 37 } 38 visited = null; 39 } 40 public TopoSorter( PAG pag, boolean ignoreTypes ) { 41 this.pag = pag; 42 this.ignoreTypes = ignoreTypes; 43 this.visited = new HashSet(); 45 } 46 47 48 49 50 protected boolean ignoreTypes; 51 protected PAG pag; 52 protected int nextFinishNumber = 1; 53 protected HashSet visited; 54 protected void dfsVisit( VarNode n ) { 55 if( visited.contains( n ) ) return; 56 visited.add( n ); 57 Node[] succs = pag.simpleLookup( n ); 58 for( int i = 0; i < succs.length; i++ ) { 59 if( ignoreTypes 60 || pag.getTypeManager().castNeverFails( 61 n.getType(), succs[i].getType() ) ) { 62 dfsVisit( (VarNode) succs[i] ); 63 } 64 } 65 n.setFinishingNumber( nextFinishNumber++ ); 66 } 67 } 68 69 70 71 | Popular Tags |