private Statement FinishAssignments(Expression right) {
List<Expression> left = null;
Expression singleLeft = null;
while (MaybeEat(TokenKind.Assign)) {
string assignError = right.CheckAssign();
if (assignError != null) {
ReportSyntaxError(right.StartIndex, right.EndIndex, assignError, ErrorCodes.SyntaxError | ErrorCodes.NoCaret);
}
if (singleLeft == null) {
singleLeft = right;
} else {
if (left == null) {
left = new List<Expression>();
left.Add(singleLeft);
}
left.Add(right);
}
if (MaybeEat(TokenKind.KeywordYield)) {
right = ParseYieldExpression();
} else {
right = ParseTestListAsExpr();
}
}
if (left != null) {
Debug.Assert(left.Count > 0);
AssignmentStatement assign = new AssignmentStatement(left.ToArray(), right);
assign.SetLoc(_globalParent, left[0].StartIndex, right.EndIndex);
return assign;
} else {
Debug.Assert(singleLeft != null);
AssignmentStatement assign = new AssignmentStatement(new[] { singleLeft }, right);
assign.SetLoc(_globalParent, singleLeft.StartIndex, right.EndIndex);
return assign;
}
}