Пример #1
0
        //with_stmt: 'with' with_item (',' with_item)* ':' suite
        //with_item: test ['as' expr]
        private WithStatement ParseWithStmt() {
            Eat(TokenKind.KeywordWith);

            var withItem = ParseWithItem();
            List<WithItem> items = null;
            while (MaybeEat(TokenKind.Comma)) {
                if (items == null) {
                    items = new List<WithItem>();
                }

                items.Add(ParseWithItem());
            }
            

            var header = GetEnd();
            Statement body = ParseSuite();
            if (items != null) {
                for (int i = items.Count - 1; i >= 0; i--) {
                    var curItem = items[i];
                    var innerWith = new WithStatement(curItem.ContextManager, curItem.Variable, body);
                    innerWith.HeaderIndex = header;                    
                    innerWith.SetLoc(_globalParent, withItem.Start, GetEnd());
                    body = innerWith;
                    header = GetEnd();
                }
            }

            WithStatement ret = new WithStatement(withItem.ContextManager, withItem.Variable, body);
            ret.HeaderIndex = header;
            ret.SetLoc(_globalParent, withItem.Start, GetEnd());
            return ret;
        }
Пример #2
0
        //with_stmt: 'with' expression [ 'as' with_var ] ':' suite
        private WithStatement ParseWithStmt() {
            SkipName(Symbols.With);
            SourceLocation start = GetStart();
            Expression contextManager = ParseExpression();
            Expression var = null;
            if (PeekName(Symbols.As)) {
                SkipName(Symbols.As);
                var = ParseExpression();
            }

            SourceLocation header = GetEnd();
            Statement body = ParseSuite();
            WithStatement ret = new WithStatement(contextManager, var, body);
            ret.Header = header;
            ret.SetLoc(start, GetEnd());
            return ret;
        }
Пример #3
0
        //with_stmt: 'with' expression [ 'as' with_var ] ':' suite
        private WithStatement ParseWithStmt() {
            Eat(TokenKind.KeywordWith);
            SourceLocation start = GetStart();
            Expression contextManager = ParseExpression();
            Expression var = null;
            if (MaybeEat(TokenKind.KeywordAs)) {
                var = ParseExpression();
            }

            SourceLocation header = GetEnd();
            Statement body = ParseSuite();
            WithStatement ret = new WithStatement(contextManager, var, body);
            ret.Header = header;
            ret.SetLoc(start, GetEnd());
            return ret;
        }
Пример #4
0
        //with_stmt: 'with' test [ 'as' with_var ] ':' suite
        private WithStatement ParseWithStmt()
        {
            EatName(SymbolTable.With);
            Location start = GetStart();
            Expression contextManager = ParseTest();
            Expression var = null;
            if (PeekName(SymbolTable.As)) {
                EatName(SymbolTable.As);
                var = ParseTest();
            }

            Location header = GetEnd();
            Statement body = ParseSuite();
            WithStatement ret = new WithStatement(contextManager, var, body);
            ret.Header = header;
            ret.SetLoc(GetExternal(), start, GetEnd());
            return ret;
        }