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 JIdentityStmt extends AbstractDefinitionStmt 42 implements IdentityStmt 43 { 44 public JIdentityStmt(Value local, Value identityValue) 45 { 46 this(Jimple.v().newLocalBox(local), 47 Jimple.v().newIdentityRefBox(identityValue)); 48 } 49 50 protected JIdentityStmt(ValueBox localBox, ValueBox identityValueBox) 51 { 52 this.leftBox = localBox; this.rightBox = identityValueBox; 53 54 defBoxes = new ArrayList(); 55 defBoxes.add(leftBox); 56 defBoxes = Collections.unmodifiableList(defBoxes); 57 } 58 59 public Object clone() 60 { 61 return new JIdentityStmt(Jimple.cloneIfNecessary(getLeftOp()), Jimple.cloneIfNecessary(getRightOp())); 62 } 63 64 public String toString() 65 { 66 return leftBox.getValue().toString() + " := " + rightBox.getValue().toString(); 67 } 68 69 public void toString( UnitPrinter up ) { 70 leftBox.toString(up); 71 up.literal(" := "); 72 rightBox.toString(up); 73 } 74 75 public void setLeftOp(Value local) 76 { 77 leftBox.setValue(local); 78 } 79 80 public void setRightOp(Value identityRef) 81 { 82 rightBox.setValue(identityRef); 83 } 84 85 public void apply(Switch sw) 86 { 87 ((StmtSwitch) sw).caseIdentityStmt(this); 88 } 89 90 public void convertToBaf(JimpleToBafContext context, List out) 91 { 92 Value currentRhs = getRightOp(); 93 Value newRhs; 94 95 if(currentRhs instanceof ThisRef) 96 newRhs = Baf.v().newThisRef((RefType)((ThisRef) currentRhs).getType()); 97 else if(currentRhs instanceof ParameterRef) 98 newRhs = Baf.v().newParameterRef(((ParameterRef)currentRhs).getType(), ((ParameterRef) currentRhs).getIndex()); 99 else if(currentRhs instanceof CaughtExceptionRef) 100 { 101 Unit u = Baf.v().newStoreInst(RefType.v(), 102 context.getBafLocalOfJimpleLocal((Local) getLeftOp())); 103 out.add(u); 104 105 Iterator it = getTags().iterator(); 106 while(it.hasNext()) { 107 u.addTag((Tag) it.next()); 108 } 109 return; 110 } 111 else 112 throw new RuntimeException ("Don't know how to convert unknown rhs"); 113 Unit u = Baf.v().newIdentityInst(context.getBafLocalOfJimpleLocal 114 ((Local) getLeftOp()), newRhs); 115 out.add(u); 116 Iterator it = getTags().iterator(); 117 while(it.hasNext()) { 118 u.addTag((Tag) it.next()); 119 } 120 } 121 122 123 } 124 125 126 127 128 129 | Popular Tags |