Exemple #1
0
    def compile(self, source, filename, mode, flags):
        from pyparser.error import SyntaxError
        from pypy.interpreter import astcompiler
        from pypy.interpreter.astcompiler.pycodegen import ModuleCodeGenerator
        from pypy.interpreter.astcompiler.pycodegen import InteractiveCodeGenerator
        from pypy.interpreter.astcompiler.pycodegen import ExpressionCodeGenerator
        from pypy.interpreter.astcompiler.ast import Node
        from pypy.interpreter.astcompiler import opt
        from pyparser.astbuilder import AstBuilder
        from pypy.interpreter.pycode import PyCode
        from pypy.interpreter.function import Function

        from pypy.interpreter.pyparser.future import getFutures

##         flags |= stdlib___future__.generators.compiler_flag   # always on (2.2 compat)
        space = self.space
        try:
            builder = AstBuilder(self.parser, self.grammar_version, space=space)
            for rulename, buildfunc in self.additional_rules.iteritems():
                assert isinstance(buildfunc, Function)
                builder.user_build_rules[rulename] = buildfunc
            flags |= getFutures(self.futureFlags, source)
            self.parser.parse_source(source, mode, builder, flags)
            ast_tree = builder.rule_stack[-1]
            encoding = builder.source_encoding
        except SyntaxError, e:
            raise OperationError(space.w_SyntaxError,
                                 e.wrap_info(space, filename))
Exemple #2
0
    def compile(self, source, filename, mode, flags):
        from pypy.interpreter.pyparser.error import SyntaxError
        from pypy.interpreter import astcompiler
        from pypy.interpreter.astcompiler.pycodegen import ModuleCodeGenerator
        from pypy.interpreter.astcompiler.pycodegen import InteractiveCodeGenerator
        from pypy.interpreter.astcompiler.pycodegen import ExpressionCodeGenerator
        from pypy.interpreter.astcompiler.ast import Node
        from pypy.interpreter.astcompiler import opt
        from pyparser.astbuilder import AstBuilder
        from pypy.interpreter.pycode import PyCode
        from pypy.interpreter.function import Function

        from pypy.interpreter.pyparser.future import getFutures

        ##         flags |= stdlib___future__.generators.compiler_flag   # always on (2.2 compat)
        space = self.space
        try:
            builder = AstBuilder(self.parser,
                                 self.grammar_version,
                                 space=space)
            for rulename, buildfunc in self.additional_rules.iteritems():
                assert isinstance(buildfunc, Function)
                builder.user_build_rules[rulename] = buildfunc
            flags |= getFutures(self.futureFlags, source)
            self.parser.parse_source(source, mode, builder, flags)
            ast_tree = builder.rule_stack[-1]
            encoding = builder.source_encoding
        except SyntaxError, e:
            raise OperationError(space.w_SyntaxError,
                                 e.wrap_info(space, filename))
def parse_python_source(space, source, mode):
    pycompiler = get_ast_compiler(space)
    parser = pycompiler.get_parser()
    flags = getFutures(pycompiler.futureFlags, source)
    builder = grammar.BaseGrammarBuilder(debug=False, parser=parser)
    builder.space = space
    try:
        parser.parse_source(source, mode, builder, flags)
        st = builder.stack[-1]
        # we compile it to bytecode anyway.
        # the side effect of this is that we grab exceptions
        # on our way.
        STType(space, st).descr_compile(space)
        return st
    except IndentationError, e:
        raise OperationError(space.w_IndentationError,
                             e.wrap_info(space, '<string>'))        
Exemple #4
0
def test_intervening_code():
    s = 'from  __future__ import (division as b, generators,)\nfrom sys import modules\nfrom __future__ import with_statement\n'
    flags = future.getFutures(future.futureFlags_2_5, s)
    assert flags & fut.CO_FUTURE_WITH_STATEMENT == 0
Exemple #5
0
def test_full_chain():
    s = '"abc" #def\n  #ghi\nfrom  __future__ import (division as b, generators,);  from __future__ import with_statement\n'
    flags = future.getFutures(future.futureFlags_2_5, s)
    assert flags == (fut.CO_FUTURE_DIVISION | fut.CO_GENERATOR_ALLOWED
                     | fut.CO_FUTURE_WITH_STATEMENT)
def test_intervening_code():
    s = 'from  __future__ import (division as b, generators,)\nfrom sys import modules\nfrom __future__ import with_statement\n'
    flags = future.getFutures(future.futureFlags_2_5, s)
    assert flags & fut.CO_FUTURE_WITH_STATEMENT == 0
def test_full_chain():
    s = '"abc" #def\n  #ghi\nfrom  __future__ import (division as b, generators,);  from __future__ import with_statement\n'
    flags = future.getFutures(future.futureFlags_2_5, s)
    assert flags == (fut.CO_FUTURE_DIVISION |
                     fut.CO_GENERATOR_ALLOWED |
                     fut.CO_FUTURE_WITH_STATEMENT)