LibJS: Treat NaN in Value::to_i32() as zero

Let's treat it as zero like the ECMAScript spec does in toInteger().

That way we can use to_i32() and don't have to care about weird input
input values where a number is expected, i.e.

"foo".charAt() === "f"
"foo".charAt("bar") === "f"
"foo".charAt(0) === "f"
This commit is contained in:
Linus Groh 2020-05-23 15:02:14 +01:00 committed by Andreas Kling
parent ecb03716d4
commit 00fe7f82c0
Notes: sideshowbarker 2024-07-19 06:12:38 +09:00
2 changed files with 9 additions and 0 deletions

View file

@ -274,6 +274,10 @@ i32 Value::to_i32(Interpreter& interpreter) const
auto number = to_number(interpreter);
if (interpreter.exception())
return 0;
if (number.is_nan())
return 0;
// FIXME: What about infinity though - that's UB...
// Maybe NumericLimits<i32>::max() for +Infinity and NumericLimits<i32>::min() for -Infinity?
return number.as_i32();
}

View file

@ -13,6 +13,11 @@ try {
assert(s.charAt(5) === 'r');
assert(s.charAt(6) === '');
assert(s.charAt() === 'f');
assert(s.charAt(NaN) === 'f');
assert(s.charAt("foo") === 'f');
assert(s.charAt(undefined) === 'f');
console.log("PASS");
} catch (e) {
console.log("FAIL: " + e);