private ForStatement ParseForStmt() {
Eat(TokenKind.KeywordFor);
var start = GetStart();
bool trailingComma;
List<Expression> l = ParseTargetList(out trailingComma);
// expr list is something like:
// ()
// a
// a,b
// a,b,c
// we either want just () or a or we want (a,b) and (a,b,c)
// so we can do tupleExpr.EmitSet() or loneExpr.EmitSet()
Expression lhs = MakeTupleOrExpr(l, trailingComma);
Eat(TokenKind.KeywordIn);
Expression list = ParseTestListAsExpr();
var header = GetEnd();
Statement body = ParseLoopSuite();
Statement else_ = null;
if (MaybeEat(TokenKind.KeywordElse)) {
else_ = ParseSuite();
}
ForStatement ret = new ForStatement(lhs, list, body, else_);
ret.HeaderIndex = header;
ret.SetLoc(_globalParent, start, GetEnd());
return ret;
}