1 19 20 25 26 27 28 29 30 31 package soot.jimple.internal; 32 33 import soot.tagkit.*; 34 import soot.*; 35 import soot.jimple.*; 36 import soot.baf.*; 37 import soot.jimple.*; 38 import soot.util.*; 39 import java.util.*; 40 41 public class JGotoStmt extends AbstractStmt implements GotoStmt 42 { 43 UnitBox targetBox; 44 45 List targetBoxes; 46 47 public JGotoStmt(Unit target) 48 { 49 this(Jimple.v().newStmtBox(target)); 50 } 51 52 public JGotoStmt(UnitBox box) 53 { 54 this.targetBox = box; 55 56 targetBoxes = new ArrayList(); 57 targetBoxes.add(this.targetBox); 58 targetBoxes = Collections.unmodifiableList(targetBoxes); 59 } 60 61 public Object clone() 62 { 63 return new JGotoStmt(getTarget()); 64 } 65 66 public String toString() 67 { 68 Unit t = getTarget(); 69 String target = "(branch)"; 70 if(!t.branches()) 71 target = t.toString(); 72 return Jimple.v().GOTO + " [?= " + target + "]"; 73 } 74 75 public void toString(UnitPrinter up) { 76 up.literal(Jimple.v().GOTO); 77 up.literal(" "); 78 targetBox.toString(up); 79 } 80 81 public Unit getTarget() 82 { 83 return targetBox.getUnit(); 84 } 85 86 public void setTarget(Unit target) 87 { 88 targetBox.setUnit(target); 89 } 90 91 public UnitBox getTargetBox() 92 { 93 return targetBox; 94 } 95 96 public List getUnitBoxes() 97 { 98 return targetBoxes; 99 } 100 101 public void apply(Switch sw) 102 { 103 ((StmtSwitch) sw).caseGotoStmt(this); 104 } 105 106 public void convertToBaf(JimpleToBafContext context, List out) 107 { 108 Unit u; 109 out.add(u = Baf.v().newGotoInst(Baf.v().newPlaceholderInst(getTarget()))); 110 111 Iterator it = getTags().iterator(); 112 while(it.hasNext()) { 113 u.addTag((Tag) it.next()); 114 } 115 } 116 117 public boolean fallsThrough(){return false;} 118 public boolean branches() { return true;} 119 120 } 121 122 123 124 | Popular Tags |