1 19 20 25 26 27 package soot.grimp.internal; 28 29 import soot.*; 30 import soot.grimp.*; 31 import soot.util.*; 32 import java.util.*; 33 import soot.jimple.*; 34 import soot.jimple.internal.*; 35 36 abstract public class AbstractGrimpIntLongBinopExpr 37 extends AbstractIntLongBinopExpr implements Precedence 38 { 39 AbstractGrimpIntLongBinopExpr(Value op1, Value op2) 40 { 41 this(Grimp.v().newArgBox(op1), 42 Grimp.v().newArgBox(op2)); 43 } 44 45 protected AbstractGrimpIntLongBinopExpr(ValueBox op1Box, ValueBox op2Box) 46 { 47 this.op1Box = op1Box; 48 this.op2Box = op2Box; 49 } 50 51 abstract public int getPrecedence(); 52 53 private String toString(Value op1, Value op2, 54 String leftOp, String rightOp) 55 { 56 if (op1 instanceof Precedence && 57 ((Precedence)op1).getPrecedence() < getPrecedence()) 58 leftOp = "(" + leftOp + ")"; 59 60 if (op2 instanceof Precedence) { 61 int opPrec = ((Precedence) op2).getPrecedence(), 62 myPrec = getPrecedence(); 63 64 if ((opPrec < myPrec) || 65 ((opPrec == myPrec) && ((this instanceof SubExpr) || (this instanceof DivExpr)))) 66 rightOp = "(" + rightOp + ")"; 67 } 68 69 return leftOp + getSymbol() + rightOp; 70 } 71 72 public String toString() 73 { 74 Value op1 = op1Box.getValue(), op2 = op2Box.getValue(); 75 String leftOp = op1.toString(), rightOp = op2.toString(); 76 77 return toString(op1, op2, leftOp, rightOp); 78 } 79 } 80 | Popular Tags |