1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 11:48:10 +00:00

LibJS: Handle empty strings and arrays in Value::to_number()

- An empty string is converted to 0
 - An empty array is converted to 0
 - An array with one item is converted to that item's numeric value
 - An array with more than one item is converted to NaN
This commit is contained in:
Linus Groh 2020-03-29 15:20:09 +01:00 committed by Andreas Kling
parent 2d3634d5f5
commit bad0556a59
2 changed files with 12 additions and 14 deletions

View file

@ -27,7 +27,6 @@
#include <AK/FlyString.h>
#include <AK/Function.h>
#include <LibJS/Interpreter.h>
#include <LibJS/Runtime/Array.h>
#include <LibJS/Runtime/MathObject.h>
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<const Array*>(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());