def __init__(self, space, override_version=None): from pyparser.pythonparse import make_pyparser PyCodeCompiler.__init__(self, space) self.grammar_version = override_version or space.config.objspace.pyversion self.parser = make_pyparser(self.grammar_version) self.additional_rules = {} if self.grammar_version >= '2.5': self.futureFlags = future.futureFlags_2_5 else: self.futureFlags = future.futureFlags_2_4 self.compiler_flags = self.futureFlags.allowed_flags
from pyparser.pythonparse import make_pyparser from pyparser.tuplebuilder import TupleBuilder import symbol import token parser = make_pyparser("native") symbol_lookup = dict((num, getattr(symbol, name)) for name, num in parser.symbols.iteritems() if not name.startswith(":")) token_lookup = dict((num, getattr(token, name)) for name, num in parser.tokens.iteritems() if name not in ("NULLTOKEN", "COMMENT", "NL")) def pypy_parse(source, mode='exec', lineno=False): builder = TupleBuilder(parser) parser.parse_source(source, mode, builder) return builder.stack[-1].as_tuple(lineno) int_map = {} int_map.update(symbol_lookup) int_map.update(token_lookup) def suite(source): return source def _renumber(a): return int_map[a] def _renumber_tree(a): # The parser from pypy seems to allocate different integer # constants to the different node types. Look up the correct