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