Esempio n. 1
0
        // list_for: 'for' target_list 'in' old_expression_list [list_iter]
        private ComprehensionFor ParseListCompFor()
        {
            Eat(TokenKind.KeywordFor);
            string startWhiteSpace = _tokenWhiteSpace;
            var start = GetStart();
            bool trailingComma;
            List<string> listWhiteSpace;
            List<Expression> l = ParseExpressionList(out trailingComma, out listWhiteSpace);

            // 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, listWhiteSpace, trailingComma, true);
            bool ateIn = Eat(TokenKind.KeywordIn);
            string inWhiteSpace;
            Expression list;

            if (ateIn) {
                inWhiteSpace = _tokenWhiteSpace;
                if (_langVersion.Is7x()) {
                    list = ParseOrTest();
                } else {
                    list = ParseOldExpressionListAsExpr();
                }
            } else {
                inWhiteSpace = null;
                list = Error("");
            }

            ComprehensionFor ret = new ComprehensionFor(lhs, list);
            if (_verbatim) {
                AddPreceedingWhiteSpace(ret, startWhiteSpace);
                if (inWhiteSpace != null) {
                    AddSecondPreceedingWhiteSpace(ret, inWhiteSpace);
                }
                if (!ateIn) {
                    AddErrorIsIncompleteNode(ret);
                }
            }

            ret.SetLoc(start, GetEnd());
            return ret;
        }
Esempio n. 2
0
 // ComprehensionFor
 public override bool Walk(ComprehensionFor node)
 {
     return ShouldWalkWorker(node);
 }
Esempio n. 3
0
 public override bool Walk(ComprehensionFor node)
 {
     if (node.Left != null) {
         node.Left.Walk(Define);
     }
     if (node.List != null) {
         node.List.Walk(this);
     }
     return false;
 }
Esempio n. 4
0
 public override void PostWalk(ComprehensionFor node)
 {
     PostWalkWorker(node);
 }