public static IJsValue ArithEval(IEnvironment environment, IJsValue lhs, IJsValue rhs, Func<double, double, double> mathOperator) { /* var l = lhs.ToNumber(); if (double.IsNaN(l) || double.IsInfinity(l)) { return environment.CreateNumber(double.NaN); } var r = rhs.ToNumber(); if (double.IsNaN(r) || double.IsInfinity(r)) { return environment.CreateNumber(double.NaN); } return environment.CreateNumber(mathOperator(l, r)); */ var v = mathOperator(lhs.ToNumber(), rhs.ToNumber()); return environment.CreateNumber(double.IsInfinity(v) ? double.NaN : v); }
public static IJsValue RelationalEval(IEnvironment environment, IJsValue lhs, IJsValue rhs, Func<double, double, bool> relationalOperator, Func<string, string, bool> stringRelationalOperator) { if ((lhs.ToPrimitive() is string) || (rhs.ToPrimitive() is string)) { return environment.CreateBool(stringRelationalOperator(lhs.ToString(), rhs.ToString())); } var ln = lhs.ToNumber(); if (double.IsNaN(ln)) { return JsUndefined.Value; } var rn = rhs.ToNumber(); if (double.IsNaN(rn)) { return JsUndefined.Value; } return environment.CreateBool(relationalOperator(ln, rn)); }
public static IJsValue Neg(IEnvironment environment, IJsValue value) { return environment.CreateNumber(-value.ToNumber()); }