diff options
Diffstat (limited to 'Libraries/LibJS/Runtime/MathObject.cpp')
-rw-r--r-- | Libraries/LibJS/Runtime/MathObject.cpp | 59 |
1 files changed, 39 insertions, 20 deletions
diff --git a/Libraries/LibJS/Runtime/MathObject.cpp b/Libraries/LibJS/Runtime/MathObject.cpp index b538591a44..133d439759 100644 --- a/Libraries/LibJS/Runtime/MathObject.cpp +++ b/Libraries/LibJS/Runtime/MathObject.cpp @@ -67,7 +67,9 @@ MathObject::~MathObject() Value MathObject::abs(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); return Value(number.as_double() >= 0 ? number.as_double() : -number.as_double()); @@ -85,7 +87,9 @@ Value MathObject::random(Interpreter&) Value MathObject::sqrt(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); return Value(::sqrt(number.as_double())); @@ -93,7 +97,9 @@ Value MathObject::sqrt(Interpreter& interpreter) Value MathObject::floor(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); return Value(::floor(number.as_double())); @@ -101,7 +107,9 @@ Value MathObject::floor(Interpreter& interpreter) Value MathObject::ceil(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); return Value(::ceil(number.as_double())); @@ -109,7 +117,9 @@ Value MathObject::ceil(Interpreter& interpreter) Value MathObject::round(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); return Value(::round(number.as_double())); @@ -120,12 +130,13 @@ Value MathObject::max(Interpreter& interpreter) if (!interpreter.argument_count()) return js_negative_infinity(); - if (interpreter.argument_count() == 1) - return interpreter.argument(0).to_number(); - - Value max = interpreter.argument(0).to_number(); + auto max = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; for (size_t i = 1; i < interpreter.argument_count(); ++i) { - Value cur = interpreter.argument(i).to_number(); + auto cur = interpreter.argument(i).to_number(interpreter); + if (interpreter.exception()) + return {}; max = Value(cur.as_double() > max.as_double() ? cur : max); } return max; @@ -136,12 +147,13 @@ Value MathObject::min(Interpreter& interpreter) if (!interpreter.argument_count()) return js_infinity(); - if (interpreter.argument_count() == 1) - return interpreter.argument(0).to_number(); - - Value min = interpreter.argument(0).to_number(); + auto min = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; for (size_t i = 1; i < interpreter.argument_count(); ++i) { - Value cur = interpreter.argument(i).to_number(); + auto cur = interpreter.argument(i).to_number(interpreter); + if (interpreter.exception()) + return {}; min = Value(cur.as_double() < min.as_double() ? cur : min); } return min; @@ -149,10 +161,11 @@ Value MathObject::min(Interpreter& interpreter) Value MathObject::trunc(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); - if (number.as_double() < 0) return MathObject::ceil(interpreter); return MathObject::floor(interpreter); @@ -160,7 +173,9 @@ Value MathObject::trunc(Interpreter& interpreter) Value MathObject::sin(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); return Value(::sin(number.as_double())); @@ -168,7 +183,9 @@ Value MathObject::sin(Interpreter& interpreter) Value MathObject::cos(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); return Value(::cos(number.as_double())); @@ -176,7 +193,9 @@ Value MathObject::cos(Interpreter& interpreter) Value MathObject::tan(Interpreter& interpreter) { - auto number = interpreter.argument(0).to_number(); + auto number = interpreter.argument(0).to_number(interpreter); + if (interpreter.exception()) + return {}; if (number.is_nan()) return js_nan(); return Value(::tan(number.as_double())); |