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:
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
|
||||
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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue