internal override string CheckAssign() { if (Items.Count == 0) { return("can't assign to ()"); } for (int i = 0; i < Items.Count; i++) { Expression e = Items[i]; if (e.CheckAssign() != null) { // we don't return the same message here as CPython doesn't seem to either, // for example ((yield a), 2,3) = (2,3,4) gives a different error than // a = yield 3 = yield 4. return("can't assign to " + e.NodeName); } } return(null); }
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; } }
internal override string CheckAssign() { return(Value.CheckAssign()); }
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; }
internal override string CheckAssign() { return(_expression.CheckAssign()); }