1 19 20 25 26 27 28 29 package soot.toolkits.scalar; 30 import soot.options.*; 31 32 import soot.*; 33 import java.util.*; 34 35 36 37 38 39 45 public class UnusedLocalEliminator extends BodyTransformer 46 { 47 public UnusedLocalEliminator( Singletons.Global g ) {} 48 public static UnusedLocalEliminator v() { return G.v().soot_toolkits_scalar_UnusedLocalEliminator(); } 49 50 protected void internalTransform(Body body, String phaseName, Map options) 51 { 52 if(Options.v().verbose()) 53 G.v().out.println("[" + body.getMethod().getName() + "] Eliminating unused locals..."); 54 55 Set usedLocals = new HashSet(); 56 57 { 59 Iterator unitIt = body.getUnits().iterator(); 60 61 while(unitIt.hasNext()) 62 { 63 Unit s = (Unit) unitIt.next(); 64 65 { 66 Iterator boxIt; 67 boxIt = s.getUseBoxes().iterator(); 68 while(boxIt.hasNext()) 69 { 70 Value value = ((ValueBox) boxIt.next()).getValue(); 71 72 if(value instanceof Local && !usedLocals.contains(value)) 73 usedLocals.add(value); 74 } 75 boxIt = s.getDefBoxes().iterator(); 76 while(boxIt.hasNext()) 77 { 78 Value value = ((ValueBox) boxIt.next()).getValue(); 79 80 if(value instanceof Local && !usedLocals.contains(value)) 81 usedLocals.add(value); 82 } 83 } 84 } 85 86 } 87 88 { 90 Iterator it = body.getLocals().iterator(); 91 92 while(it.hasNext()) 93 { 94 Local local = (Local) it.next(); 95 96 if(!usedLocals.contains(local)) 97 it.remove(); 98 } 99 } 100 } 101 } 102 | Popular Tags |