mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-24 02:03:06 -05:00
LibJS: Implement modulo assignment operator (%=)
This commit is contained in:
parent
a2e1f1a872
commit
72d2bd56ce
Notes:
sideshowbarker
2024-07-19 06:57:53 +09:00
Author: https://github.com/linusg Commit: https://github.com/SerenityOS/serenity/commit/72d2bd56ce5 Pull-request: https://github.com/SerenityOS/serenity/pull/2105
4 changed files with 18 additions and 0 deletions
|
@ -850,6 +850,12 @@ Value AssignmentExpression::execute(Interpreter& interpreter) const
|
|||
return {};
|
||||
rhs_result = div(interpreter, lhs_result, rhs_result);
|
||||
break;
|
||||
case AssignmentOp::ModuloAssignment:
|
||||
lhs_result = m_lhs->execute(interpreter);
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
rhs_result = mod(interpreter, lhs_result, rhs_result);
|
||||
break;
|
||||
case AssignmentOp::ExponentiationAssignment:
|
||||
lhs_result = m_lhs->execute(interpreter);
|
||||
if (interpreter.exception())
|
||||
|
@ -960,6 +966,9 @@ void AssignmentExpression::dump(int indent) const
|
|||
case AssignmentOp::DivisionAssignment:
|
||||
op_string = "/=";
|
||||
break;
|
||||
case AssignmentOp::ModuloAssignment:
|
||||
op_string = "%=";
|
||||
break;
|
||||
case AssignmentOp::ExponentiationAssignment:
|
||||
op_string = "**=";
|
||||
break;
|
||||
|
|
|
@ -604,6 +604,7 @@ enum class AssignmentOp {
|
|||
SubtractionAssignment,
|
||||
MultiplicationAssignment,
|
||||
DivisionAssignment,
|
||||
ModuloAssignment,
|
||||
ExponentiationAssignment,
|
||||
BitwiseAndAssignment,
|
||||
BitwiseOrAssignment,
|
||||
|
|
|
@ -634,6 +634,9 @@ NonnullRefPtr<Expression> Parser::parse_secondary_expression(NonnullRefPtr<Expre
|
|||
case TokenType::Percent:
|
||||
consume();
|
||||
return create_ast_node<BinaryExpression>(BinaryOp::Modulo, move(lhs), parse_expression(min_precedence, associativity));
|
||||
case TokenType::PercentEquals:
|
||||
consume();
|
||||
return create_ast_node<AssignmentExpression>(AssignmentOp::ModuloAssignment, move(lhs), parse_expression(min_precedence, associativity));
|
||||
case TokenType::DoubleAsterisk:
|
||||
consume();
|
||||
return create_ast_node<BinaryExpression>(BinaryOp::Exponentiation, move(lhs), parse_expression(min_precedence, associativity));
|
||||
|
@ -1194,6 +1197,7 @@ bool Parser::match_secondary_expression() const
|
|||
|| type == TokenType::Slash
|
||||
|| type == TokenType::SlashEquals
|
||||
|| type == TokenType::Percent
|
||||
|| type == TokenType::PercentEquals
|
||||
|| type == TokenType::DoubleAsterisk
|
||||
|| type == TokenType::DoubleAsteriskEquals
|
||||
|| type == TokenType::Equals
|
||||
|
|
|
@ -23,6 +23,10 @@ try {
|
|||
assert((x /= 2) === 3);
|
||||
assert(x === 3);
|
||||
|
||||
x = 6;
|
||||
assert((x %= 4) === 2);
|
||||
assert(x === 2);
|
||||
|
||||
x = 2;
|
||||
assert((x **= 3) === 8);
|
||||
assert(x === 8);
|
||||
|
|
Loading…
Add table
Reference in a new issue