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))
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>'))
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)
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)