/**
*
*/
package tefkat.engine.runtime.functions;
import tefkat.engine.runtime.Binding;
import tefkat.engine.runtime.Context;
import tefkat.engine.runtime.Function;
final public class Add implements Function {
public Object call(Context ctxt, Binding binding, Object[] params) {
Number lhs = (Number) params[0];
Number rhs = (Number) params[1];
if (lhs instanceof Float || rhs instanceof Float || lhs instanceof Double || rhs instanceof Double) {
double lval = lhs.doubleValue();
double rval = rhs.doubleValue();
double result = lval + rval;
if (result < Float.MAX_VALUE && result > Float.MIN_VALUE) {
return new Float(result);
} else {
return new Double(result);
}
} else {
long lval = lhs.longValue();
long rval = rhs.longValue();
long result = lval + rval;
if (result < Integer.MAX_VALUE && result > Integer.MIN_VALUE) {
return new Integer((int) result);
} else {
return new Long(result);
}
}
}
}