// "for" target_list "in" or_test private ForStatement ParseGenExprFor() { var start = GetStart(); Eat(TokenKind.KeywordFor); bool trailingComma; List<Expression> l = ParseTargetList(out trailingComma); Expression lhs = MakeTupleOrExpr(l, trailingComma); Eat(TokenKind.KeywordIn); Expression expr = null; expr = ParseOrTest(); ForStatement gef = new ForStatement(lhs, expr, null, null); var end = GetEnd(); gef.SetLoc(_globalParent, start, end); gef.HeaderIndex = end; return gef; }
// Python 2.5 -> "for" expression_list "in" or_test private ForStatement ParseGenExprFor() { Location start = GetStart(); Eat(TokenKind.KeywordFor); List<Expression> l = ParseExprList(); Expression lhs = MakeTupleOrExpr(l, false); Eat(TokenKind.KeywordIn); Expression test = null; if (Options.Python25 == true) { test = ParseOrTest(); } else { test = ParseTest(); } ForStatement gef = new ForStatement(lhs, test, null, null); Location end = GetEnd(); gef.SetLoc(GetExternal(), start, end); gef.Header = end; return gef; }
//for_stmt: 'for' target_list 'in' expression_list ':' suite ['else' ':' suite] 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; }
//for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] private ForStatement ParseForStmt() { Eat(TokenKind.KeywordFor); Location start = GetStart(); List<Expression> l = ParseExprList(); //TokenKind.KeywordIn); // 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, false); Eat(TokenKind.KeywordIn); Expression list = ParseTestListAsExpr(false); Location header = GetEnd(); Statement body = ParseSuite(); Statement else_ = null; if (MaybeEat(TokenKind.KeywordElse)) { else_ = ParseSuite(); } ForStatement ret = new ForStatement(lhs, list, body, else_); ret.Header = header; ret.SetLoc(GetExternal(), start, GetEnd()); return ret; }