1 16 17 package org.apache.commons.jexl.parser; 18 19 import org.apache.commons.jexl.util.Coercion; 20 import org.apache.commons.jexl.JexlContext; 21 22 29 public class ASTSubtractNode extends SimpleNode { 30 35 public ASTSubtractNode(int id) { 36 super(id); 37 } 38 39 45 public ASTSubtractNode(Parser p, int id) { 46 super(p, id); 47 } 48 49 50 public Object value(JexlContext context) throws Exception { 51 Object left = ((SimpleNode) jjtGetChild(0)).value(context); 52 Object right = ((SimpleNode) jjtGetChild(1)).value(context); 53 54 57 if (left == null && right == null) { 58 return new Byte ((byte) 0); 59 } 60 61 65 if (left instanceof Float 66 || left instanceof Double 67 || right instanceof Float 68 || right instanceof Double 69 || (left instanceof String 70 && (((String ) left).indexOf(".") != -1 71 || ((String ) left).indexOf("e") != -1 72 || ((String ) left).indexOf("E") != -1)) 73 || (right instanceof String 74 && (((String ) right).indexOf(".") != -1 75 || ((String ) right).indexOf("e") != -1 76 || ((String ) right).indexOf("E") != -1))) { 77 Double l = Coercion.coerceDouble(left); 78 Double r = Coercion.coerceDouble(right); 79 80 return new Double (l.doubleValue() - r.doubleValue()); 81 } 82 83 86 87 Long l = Coercion.coerceLong(left); 88 Long r = Coercion.coerceLong(right); 89 90 return new Long (l.longValue() - r.longValue()); 91 92 } 93 94 95 public Object jjtAccept(ParserVisitor visitor, Object data) { 96 return visitor.visit(this, data); 97 } 98 } 99 | Popular Tags |