def mod_scope(self, source, mode="exec"): info = pyparse.CompileInfo("<test>", mode, consts.CO_FUTURE_WITH_STATEMENT) tree = self.parser.parse_source(source, info) module = astbuilder.ast_from_node(self.space, tree, info) builder = symtable.SymtableBuilder(self.space, module, info) scope = builder.find_scope(module) assert isinstance(scope, symtable.ModuleScope) return scope
def generate_function_code(expr, space): p = pyparse.PythonParser(space) info = pyparse.CompileInfo("<test>", 'exec') cst = p.parse_source(expr, info) ast = astbuilder.ast_from_node(space, cst, info) function_ast = optimize.optimize_ast(space, ast.body[0], info) function_ast = ast.body[0] symbols = symtable.SymtableBuilder(space, ast, info) generator = codegen.FunctionCodeGenerator(space, 'function', function_ast, 1, symbols, info) blocks = generator.first_block.post_order() generator._resolve_block_targets(blocks) return generator, blocks
def compile_ast(space, module, info): """Generate a code object from AST.""" symbols = symtable.SymtableBuilder(space, module, info) return TopLevelCodeGenerator(space, module, symbols, info).assemble()