1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-02 22:22:07 +00:00

LibJS: Implement +=, -=, *=, and /= assignment operators

This commit is contained in:
Conrad Pankoff 2020-03-12 23:09:15 +11:00 committed by Andreas Kling
parent 0fe87c5fec
commit 2b36b4f09f
3 changed files with 48 additions and 0 deletions

View file

@ -383,6 +383,22 @@ Value AssignmentExpression::execute(Interpreter& interpreter) const
case AssignmentOp::Assign:
interpreter.set_variable(name, rhs_result);
break;
case AssignmentOp::PlusEquals:
rhs_result = add(m_lhs->execute(interpreter), rhs_result);
interpreter.set_variable(name, rhs_result);
break;
case AssignmentOp::MinusEquals:
rhs_result = sub(m_lhs->execute(interpreter), rhs_result);
interpreter.set_variable(name, rhs_result);
break;
case AssignmentOp::AsteriskEquals:
rhs_result = mul(m_lhs->execute(interpreter), rhs_result);
interpreter.set_variable(name, rhs_result);
break;
case AssignmentOp::SlashEquals:
rhs_result = div(m_lhs->execute(interpreter), rhs_result);
interpreter.set_variable(name, rhs_result);
break;
}
return rhs_result;
}
@ -394,6 +410,18 @@ void AssignmentExpression::dump(int indent) const
case AssignmentOp::Assign:
op_string = "=";
break;
case AssignmentOp::PlusEquals:
op_string = "+=";
break;
case AssignmentOp::MinusEquals:
op_string = "-=";
break;
case AssignmentOp::AsteriskEquals:
op_string = "*=";
break;
case AssignmentOp::SlashEquals:
op_string = "/=";
break;
}
ASTNode::dump(indent);