summaryrefslogtreecommitdiff
path: root/Libraries/LibJS/Runtime/MathObject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/LibJS/Runtime/MathObject.cpp')
-rw-r--r--Libraries/LibJS/Runtime/MathObject.cpp59
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()));