Exemple #1
0
        //with_stmt: 'with' with_item (',' with_item)* ':' suite
        //with_item: test ['as' expr]
        private WithStatement ParseWithStmt()
        {
            var start = _lookahead.Span.Start;
            Eat(TokenKind.KeywordWith);
            string withWhiteSpace = _tokenWhiteSpace;
            var itemWhiteSpace = MakeWhiteSpaceList();

            List<WithItem> items = new List<WithItem>();
            items.Add(ParseWithItem(itemWhiteSpace));
            while (MaybeEat(TokenKind.Comma)) {
                if (itemWhiteSpace != null) {
                    itemWhiteSpace.Add(_tokenWhiteSpace);
                }
                items.Add(ParseWithItem(itemWhiteSpace));
            }

            var header = GetEnd();
            Statement body = ParseSuite();

            WithStatement ret = new WithStatement(items.ToArray(), body);
            if (_verbatim) {
                AddPreceedingWhiteSpace(ret, withWhiteSpace);
                AddListWhiteSpace(ret, itemWhiteSpace.ToArray());
            }
            ret.SetLoc(start, body.EndIndex);
            return ret;
        }