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 import soot.dava.internal.javaRep.*; 36 37 abstract public class AbstractGrimpIntBinopExpr 38 extends AbstractIntBinopExpr implements Precedence 39 { 40 public AbstractGrimpIntBinopExpr(Value op1, Value op2) 41 { 42 this(Grimp.v().newArgBox(op1), 43 Grimp.v().newArgBox(op2)); 44 } 45 46 protected AbstractGrimpIntBinopExpr(ValueBox op1Box, ValueBox op2Box) 47 { 48 this.op1Box = op1Box; 49 this.op2Box = op2Box; 50 } 51 52 abstract public int getPrecedence(); 53 54 private String toString(Value op1, Value op2, 55 String leftOp, String rightOp) 56 { 57 if (op1 instanceof Precedence && 58 ((Precedence)op1).getPrecedence() < getPrecedence()) 59 leftOp = "(" + leftOp + ")"; 60 61 if (op2 instanceof Precedence) { 62 int opPrec = ((Precedence) op2).getPrecedence(), 63 myPrec = getPrecedence(); 64 65 if ((opPrec < myPrec) || 66 ((opPrec == myPrec) && ((this instanceof SubExpr) || (this instanceof DivExpr) || 67 (this instanceof DCmpExpr) || (this instanceof DCmpgExpr) || (this instanceof DCmplExpr)))) 68 69 rightOp = "(" + rightOp + ")"; 70 } 71 72 return leftOp + getSymbol() + rightOp; 73 } 74 75 public String toString() 76 { 77 Value op1 = op1Box.getValue(), op2 = op2Box.getValue(); 78 String leftOp = op1.toString(), rightOp = op2.toString(); 79 80 return toString(op1, op2, leftOp, rightOp); 81 } 82 } 83 | Popular Tags |