1 16 package com.google.gwt.dev.jjs.ast; 17 18 import com.google.gwt.dev.jjs.SourceInfo; 19 20 23 public class JBinaryOperation extends JExpression implements HasSettableType { 24 25 private JExpression lhs; 26 private final JBinaryOperator op; 27 private JExpression rhs; 28 private JType type; 29 30 public JBinaryOperation(JProgram program, SourceInfo info, JType type, 31 JBinaryOperator op, JExpression lhs, JExpression rhs) { 32 super(program, info); 33 this.op = op; 34 this.type = type; 35 this.lhs = lhs; 36 this.rhs = rhs; 37 } 38 39 public JExpression getLhs() { 40 return lhs; 41 } 42 43 public JBinaryOperator getOp() { 44 return op; 45 } 46 47 public JExpression getRhs() { 48 return rhs; 49 } 50 51 public JType getType() { 52 if (op == JBinaryOperator.ASG) { 53 return getRhs().getType(); 55 } else if (isAssignment()) { 56 return getLhs().getType(); 58 } else { 59 return type; 61 } 62 } 63 64 public boolean hasSideEffects() { 65 return op.isAssignment() || getLhs().hasSideEffects() 66 || getRhs().hasSideEffects(); 67 } 68 69 public boolean isAssignment() { 70 return op.isAssignment(); 71 } 72 73 public void setType(JType newType) { 74 type = newType; 75 } 76 77 public void traverse(JVisitor visitor, Context ctx) { 78 if (visitor.visit(this, ctx)) { 79 lhs = visitor.accept(lhs); 80 rhs = visitor.accept(rhs); 81 } 82 visitor.endVisit(this, ctx); 83 } 84 85 } 86 | Popular Tags |