def compile(self, display=0): tree = self._get_tree() gen = ModuleCodeGenerator(tree) if display: import pprint print pprint.pprint(tree) self.code = gen.getCode()
def _nameOp(self, prefix, name): if name in runtime_vars: return self.emit(prefix + '_GLOBAL', name) return ModuleCodeGenerator._nameOp(self, prefix, name)
def __init__(self, node, filename): ModuleCodeGenerator.__init__(self, transform(node, filename))
def initClass(self): ModuleCodeGenerator.initClass(self) self.__class__.FunctionGen = RestrictedFunctionCodeGenerator
if e.lineno is not None: msg = "Syntax error on line %d of %s" % (e.lineno + lineno - line_offset, filename) if len(source) < 128: msg += ":\n " + orig_source raise Exception(msg) else: raise recursively_replace(tree, wrap_node) if mode == 'exec': set_filename(filename, lineno - line_offset, tree) cg = ModuleCodeGenerator(tree) else: set_filename(filename, lineno - line_offset, tree) cg = ExpressionCodeGenerator(tree) return cg.getCode() def py_compile_exec_bytecode(source, **kwargs): code = py_compile(source, 'exec', **kwargs) return marshal.dumps(code) def py_compile_eval_bytecode(source, **kwargs): source = source.strip() code = py_compile(source, 'eval', **kwargs) return marshal.dumps(code)
if e.lineno is not None: msg = "Syntax error on line %d of %s" % (e.lineno + lineno - line_offset, filename) if len(source) < 128: msg += ":\n " + orig_source raise Exception(msg) else: raise recursively_replace(tree, wrap_node) if mode == 'exec': set_filename(filename, lineno - line_offset, tree) cg = ModuleCodeGenerator(tree) else: set_filename(filename, lineno - line_offset, tree) cg = ExpressionCodeGenerator(tree) return cg.getCode() def py_compile_exec_bytecode(source, **kwargs): code = py_compile(source, 'exec', **kwargs) return marshal.dumps(code) def py_compile_eval_bytecode(source, **kwargs): source = source.strip() code = py_compile(source, 'eval', **kwargs)
return tree def compile_function(src, filename, func_name, arg_names, defaults=[], # more args to come... lineno=0): assert filename, "filename is required" try: tree = parse_function(_fix_src(src), func_name, arg_names, defaults) except SyntaxError, err: err.lineno += lineno err.filename = filename raise SyntaxError, err set_filename_and_offset(filename, lineno, tree) gen = ModuleCodeGenerator(tree) return gen.getCode() # And a 'standard' compile, but with the filename offset feature. def compile(src, filename, mode='exec', flags=None, dont_inherit=None, lineno=0): if flags is not None or dont_inherit is not None or mode != 'exec': raise RuntimeError, "not implemented yet" try: tree = parse(_fix_src(src), mode) except SyntaxError, err: err.lineno += lineno err.filename = filename raise SyntaxError, err set_filename_and_offset(filename, lineno, tree)