mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:57:44 +00:00
LibJS: Add spec comments to Value::to_integer_or_infinity()
This commit is contained in:
parent
72ee346f64
commit
058a247c61
1 changed files with 16 additions and 0 deletions
|
@ -1123,14 +1123,28 @@ ThrowCompletionOr<size_t> Value::to_index(VM& vm) const
|
||||||
// 7.1.5 ToIntegerOrInfinity ( argument ), https://tc39.es/ecma262/#sec-tointegerorinfinity
|
// 7.1.5 ToIntegerOrInfinity ( argument ), https://tc39.es/ecma262/#sec-tointegerorinfinity
|
||||||
ThrowCompletionOr<double> Value::to_integer_or_infinity(VM& vm) const
|
ThrowCompletionOr<double> Value::to_integer_or_infinity(VM& vm) const
|
||||||
{
|
{
|
||||||
|
// 1. Let number be ? ToNumber(argument).
|
||||||
auto number = TRY(to_number(vm));
|
auto number = TRY(to_number(vm));
|
||||||
|
|
||||||
|
// 2. If number is NaN, +0𝔽, or -0𝔽, return 0.
|
||||||
if (number.is_nan() || number.as_double() == 0)
|
if (number.is_nan() || number.as_double() == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
// 3. If number is +∞𝔽, return +∞.
|
||||||
|
// 4. If number is -∞𝔽, return -∞.
|
||||||
if (number.is_infinity())
|
if (number.is_infinity())
|
||||||
return number.as_double();
|
return number.as_double();
|
||||||
|
|
||||||
|
// 5. Let integer be floor(abs(ℝ(number))).
|
||||||
auto integer = floor(fabs(number.as_double()));
|
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)
|
if (number.as_double() < 0 && integer != 0)
|
||||||
integer = -integer;
|
integer = -integer;
|
||||||
|
|
||||||
|
// 7. Return integer.
|
||||||
return integer;
|
return integer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1155,6 +1169,8 @@ double to_integer_or_infinity(double number)
|
||||||
auto integer = floor(fabs(number));
|
auto integer = floor(fabs(number));
|
||||||
|
|
||||||
// 6. If number < -0𝔽, set integer to -integer.
|
// 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)
|
if (number < 0 && integer != 0)
|
||||||
integer = -integer;
|
integer = -integer;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue