mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:47:45 +00:00
LibJS: Implement bitwise unsigned right shift operator (>>>)
This commit is contained in:
parent
502d1f5165
commit
396ecfa2d7
6 changed files with 108 additions and 0 deletions
|
@ -273,6 +273,17 @@ Value right_shift(Interpreter&, Value lhs, Value rhs)
|
|||
return Value((i32)lhs_number.as_double() >> (i32)rhs_number.as_double());
|
||||
}
|
||||
|
||||
Value unsigned_right_shift(Interpreter&, Value lhs, Value rhs)
|
||||
{
|
||||
auto lhs_number = lhs.to_number();
|
||||
if (!lhs_number.is_finite_number())
|
||||
return Value(0);
|
||||
auto rhs_number = rhs.to_number();
|
||||
if (!rhs_number.is_finite_number())
|
||||
return lhs_number;
|
||||
return Value((unsigned)lhs_number.as_double() >> (i32)rhs_number.as_double());
|
||||
}
|
||||
|
||||
Value add(Interpreter& interpreter, Value lhs, Value rhs)
|
||||
{
|
||||
auto lhs_primitive = lhs.to_primitive(interpreter);
|
||||
|
|
|
@ -82,6 +82,12 @@ public:
|
|||
m_value.as_double = value;
|
||||
}
|
||||
|
||||
explicit Value(unsigned value)
|
||||
: m_type(Type::Number)
|
||||
{
|
||||
m_value.as_double = static_cast<double>(value);
|
||||
}
|
||||
|
||||
explicit Value(i32 value)
|
||||
: m_type(Type::Number)
|
||||
{
|
||||
|
@ -207,6 +213,7 @@ Value unary_plus(Interpreter&, Value);
|
|||
Value unary_minus(Interpreter&, Value);
|
||||
Value left_shift(Interpreter&, Value lhs, Value rhs);
|
||||
Value right_shift(Interpreter&, Value lhs, Value rhs);
|
||||
Value unsigned_right_shift(Interpreter&, Value lhs, Value rhs);
|
||||
Value add(Interpreter&, Value lhs, Value rhs);
|
||||
Value sub(Interpreter&, Value lhs, Value rhs);
|
||||
Value mul(Interpreter&, Value lhs, Value rhs);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue