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

LibJS: Add spec comments to Value::to_integer_or_infinity()

This commit is contained in:
Linus Groh 2022-12-10 00:03:24 +00:00
parent 72ee346f64
commit 058a247c61

View file

@ -1123,14 +1123,28 @@ ThrowCompletionOr<size_t> Value::to_index(VM& vm) const
// 7.1.5 ToIntegerOrInfinity ( argument ), https://tc39.es/ecma262/#sec-tointegerorinfinity
ThrowCompletionOr<double> Value::to_integer_or_infinity(VM& vm) const
{
// 1. Let number be ? ToNumber(argument).
auto number = TRY(to_number(vm));
// 2. If number is NaN, +0𝔽, or -0𝔽, return 0.
if (number.is_nan() || number.as_double() == 0)
return 0;
// 3. If number is +∞𝔽, return +∞.
// 4. If number is -∞𝔽, return -∞.
if (number.is_infinity())
return number.as_double();
// 5. Let integer be floor(abs((number))).
auto integer = floor(fabs(number.as_double()));
// 6. If number < -0𝔽, set integer to -integer.
// NOTE: The zero check is required as 'integer' is a double here but an MV in the spec,
// which doesn't have negative zero.
if (number.as_double() < 0 && integer != 0)
integer = -integer;
// 7. Return integer.
return integer;
}
@ -1155,6 +1169,8 @@ double to_integer_or_infinity(double number)
auto integer = floor(fabs(number));
// 6. If number < -0𝔽, set integer to -integer.
// NOTE: The zero check is required as 'integer' is a double here but an MV in the spec,
// which doesn't have negative zero.
if (number < 0 && integer != 0)
integer = -integer;