Commit 379095c1 authored by Toon Verwaest's avatar Toon Verwaest Committed by Commit Bot

[parser] Simplify assignment parsing

Change-Id: Ie157933d32acf89ff3c1571c843f07ff6fd1c525
Reviewed-on: https://chromium-review.googlesource.com/c/1400782Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
Commit-Queue: Toon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/master@{#58638}
parent 7c3595ef
......@@ -2568,31 +2568,21 @@ ParserBase<Impl>::ParseAssignmentExpressionCoverGrammar() {
return expression;
}
// Destructuring assignmment.
if (V8_UNLIKELY(expression->IsPattern() && op == Token::ASSIGN)) {
expression_scope()->ValidateAsPattern(expression, lhs_beg_pos,
end_position());
Consume(op);
int pos = position();
ExpressionT right = ParseAssignmentExpression();
ExpressionT result = factory()->NewAssignment(op, expression, right, pos);
return result;
}
if (V8_UNLIKELY(!IsValidReferenceExpression(expression))) {
expression = RewriteInvalidReferenceExpression(
expression, lhs_beg_pos, end_position(),
MessageTemplate::kInvalidLhsInAssignment);
if (V8_LIKELY(impl()->IsAssignableIdentifier(expression))) {
expression_scope()->MarkIdentifierAsAssigned();
} else if (expression->IsProperty()) {
expression_scope()->RecordDeclarationError(
Scanner::Location(lhs_beg_pos, end_position()),
MessageTemplate::kInvalidPropertyBindingPattern);
} else if (expression->IsPattern() && op == Token::ASSIGN) {
// Destructuring assignmment.
expression_scope()->ValidateAsPattern(expression, lhs_beg_pos,
end_position());
} else {
DCHECK(impl()->IsAssignableIdentifier(expression));
expression_scope()->MarkIdentifierAsAssigned();
DCHECK(!IsValidReferenceExpression(expression));
expression = RewriteInvalidReferenceExpression(
expression, lhs_beg_pos, end_position(),
MessageTemplate::kInvalidLhsInAssignment);
}
Consume(op);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment