diff --git a/Libraries/LibJS/Runtime/MathObject.cpp b/Libraries/LibJS/Runtime/MathObject.cpp index e596165659..8f9de1911f 100644 --- a/Libraries/LibJS/Runtime/MathObject.cpp +++ b/Libraries/LibJS/Runtime/MathObject.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include namespace JS { @@ -47,18 +46,7 @@ Value MathObject::abs(Interpreter& interpreter) if (interpreter.call_frame().arguments.is_empty()) return js_nan(); - auto argument = interpreter.call_frame().arguments[0]; - - if (argument.is_array()) { - auto& array = *static_cast(argument.as_object()); - if (array.length() == 0) - return Value(0); - if (array.length() > 1) - return js_nan(); - argument = array.elements()[0]; - } - - auto number = argument.to_number(); + auto number = interpreter.call_frame().arguments[0].to_number(); if (number.is_nan()) return js_nan(); return Value(number.as_double() >= 0 ? number.as_double() : -number.as_double()); diff --git a/Libraries/LibJS/Runtime/Value.cpp b/Libraries/LibJS/Runtime/Value.cpp index 240d828696..50fd735b41 100644 --- a/Libraries/LibJS/Runtime/Value.cpp +++ b/Libraries/LibJS/Runtime/Value.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -128,7 +129,16 @@ Value Value::to_number() const case Type::Undefined: return js_nan(); case Type::Object: - return m_value.as_object->to_primitive(Object::PreferredType::Number).to_number(); + if (m_value.as_object->is_array()) { + auto& array = *static_cast(m_value.as_object); + if (array.length() == 0) + return Value(0); + if (array.length() > 1) + return js_nan(); + return array.elements()[0].to_number(); + } else { + return m_value.as_object->to_primitive(Object::PreferredType::Number).to_number(); + } } ASSERT_NOT_REACHED();