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.util.*; 37 import soot.baf.*; 38 import soot.jimple.*; 39 import java.util.*; 40 41 public class JThrowStmt extends AbstractStmt implements ThrowStmt 42 { 43 ValueBox opBox; 44 45 public JThrowStmt(Value op) 46 { 47 this(Jimple.v().newImmediateBox(op)); 48 } 49 50 protected JThrowStmt(ValueBox opBox) 51 { 52 this.opBox = opBox; 53 } 54 55 public Object clone() 56 { 57 return new JThrowStmt(Jimple.cloneIfNecessary(getOp())); 58 } 59 60 public ValueBox getOpBox() 61 { 62 return opBox; 63 } 64 65 public Value getOp() 66 { 67 return opBox.getValue(); 68 } 69 70 public void setOp(Value op) 71 { 72 opBox.setValue(op); 73 } 74 75 public String toString() 76 { 77 return "throw " + opBox.getValue().toString(); 78 } 79 80 public void toString(UnitPrinter up) { 81 up.literal(Jimple.v().THROW); 82 up.literal(" "); 83 opBox.toString(up); 84 } 85 86 public List getUseBoxes() 87 { 88 List useBoxes = new ArrayList(); 89 90 useBoxes.addAll(opBox.getValue().getUseBoxes()); 91 useBoxes.add(opBox); 92 93 return useBoxes; 94 } 95 96 public void apply(Switch sw) 97 { 98 ((StmtSwitch) sw).caseThrowStmt(this); 99 } 100 101 102 public void convertToBaf(JimpleToBafContext context, List out) 103 { 104 ((ConvertToBaf)getOp()).convertToBaf(context, out); 105 106 Unit u; 107 out.add(u = Baf.v().newThrowInst()); 108 109 Unit currentUnit = this; 110 111 Iterator it = currentUnit.getTags().iterator(); 112 while(it.hasNext()) { 113 u.addTag((Tag) it.next()); 114 } 115 116 } 117 118 119 120 public boolean fallsThrough(){return false;} 121 public boolean branches(){return false;} 122 123 124 125 } 126 | Popular Tags |