package org.nutz.el.opt.arithmetic;
import org.nutz.el.opt.TwoTernary;
/**
* "+"
* @author juqkai(juqkai@gmail.com)
*
*/
public class PlusOpt extends TwoTernary {
public int fetchPriority() {
return 4;
}
public String fetchSelf() {
return "+";
}
public Object calculate() {
Object lval = calculateItem(this.left);
Object rval = calculateItem(this.right);
if(lval instanceof String || rval instanceof String){
return lval.toString() + rval.toString();
}
Number nlval = (Number) lval;
Number nrval = (Number) rval;
if(nrval instanceof Double || nlval instanceof Double){
return nlval.doubleValue() + nrval.doubleValue();
}
if(nrval instanceof Float || nlval instanceof Float){
return nlval.floatValue() + nrval.floatValue();
}
if(nrval instanceof Long || nlval instanceof Long){
return nlval.longValue() + nrval.longValue();
}
return nlval.intValue() + nrval.intValue();
}
}