mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-08 06:09:58 +00:00
LibJS: Make bitwise NOT work correctly with NaN and Infinity
This was missing a "toInt32()" which returns 0 for NaN and Infinity.
From the spec:
6.1.6.1.2 Number::bitwiseNOT ( x )
The abstract operation Number::bitwiseNOT takes argument x (a Number).
It performs the following steps when called:
Let oldValue be ! ToInt32(x).
Return the result of applying bitwise complement to oldValue.
The mathematical value of the result is exactly representable as
a 32-bit two's complement bit string.
Fixes #4868.
This commit is contained in:
parent
c55cb7843a
commit
9fca86109b
Notes:
sideshowbarker
2024-07-18 23:59:59 +09:00
Author: https://github.com/linusg
Commit: 9fca86109b
Pull-request: https://github.com/SerenityOS/serenity/pull/4869
1 changed files with 1 additions and 1 deletions
|
|
@ -669,7 +669,7 @@ Value bitwise_not(GlobalObject& global_object, Value lhs)
|
|||
if (global_object.vm().exception())
|
||||
return {};
|
||||
if (lhs_numeric.is_number())
|
||||
return Value(~(i32)lhs_numeric.as_double());
|
||||
return Value(~lhs_numeric.to_i32(global_object));
|
||||
auto big_integer_bitwise_not = lhs_numeric.as_bigint().big_integer();
|
||||
big_integer_bitwise_not = big_integer_bitwise_not.plus(Crypto::SignedBigInteger { 1 });
|
||||
big_integer_bitwise_not.negate();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue