private Statement FinishAssignments(Expression right) { List<Expression> left = new List<Expression>(); while (MaybeEat(TokenKind.Assign)) { string assignError = right.CheckAssign(); if (assignError != null) { ReportSyntaxError(right.Span.Start, right.Span.End, assignError, ErrorCodes.SyntaxError); } left.Add(right); if (MaybeEat(TokenKind.KeywordYield)) { right = ParseYieldExpression(); } else { bool trailingComma; var exprs = ParseExpressionList(out trailingComma); if (exprs.Count == 0) { ReportSyntaxError(left[0].Start, left[0].End, "invalid syntax"); } right = MakeTupleOrExpr(exprs, trailingComma); } } Debug.Assert(left.Count > 0); AssignmentStatement assign = new AssignmentStatement(left.ToArray(), right); assign.SetLoc(left[0].Start, right.End); return assign; }
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; } }
private Statement FinishAssignments(Expression right) { List<Expression> left = new List<Expression>(); while (MaybeEat(TokenKind.Assign)) { left.Add(right); if (MaybeEat(TokenKind.KeywordYield)) { right = ParseYieldExpression(); } else { right = ParseTestListAsExpr(false); } } Debug.Assert(left.Count > 0); AssignmentStatement assign = new AssignmentStatement(left.ToArray(), right); assign.SetLoc(left[0].Start, right.End); return assign; }