def on_new(self, event): body = [ "def __init__(self):", " Choice.__init__(self)", " self.__glumolinit__()", "def __glumolinit__(self):", " self.text = 'Say something'" ] name = "Choice" + str(len(self.shapes) + 1) c = self.woolsey.classe.add_class(name, ["Choice"], body) newname = guess_free_name("Choice") from compiler.misc import set_filename from compiler.pycodegen import ModuleCodeGenerator set_filename("__foo__.py", self.woolsey.active_resource.ast) gen = ModuleCodeGenerator(self.woolsey.active_resource.ast) self.classe = classe = self.woolsey.active_resource.get_class() wx.GetApp().gns.run(gen.getCode()) obj = self.woolsey.create_dialog_item(name) item = self.woolsey.create_child("Say something") item.classe = c item.obj = obj self.Refresh() del self.current_position return item
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 _compile(node, source=None, mode='eval', filename=None, lineno=-1): xform = { 'eval': ExpressionASTTransformer }.get(mode, TemplateASTTransformer) tree = xform().visit(node) if isinstance(filename, unicode): # unicode file names not allowed for code objects filename = filename.encode('utf-8', 'replace') elif not filename: filename = '<string>' tree.filename = filename if lineno <= 0: lineno = 1 if mode == 'eval': gen = ExpressionCodeGenerator(tree) name = '<Expression %s>' % (repr(source or '?')) else: gen = ModuleCodeGenerator(tree) name = '<Suite>' gen.optimized = True code = gen.getCode() # We'd like to just set co_firstlineno, but it's readonly. So we need to # clone the code object while adjusting the line number return new.code(0, code.co_nlocals, code.co_stacksize, code.co_flags | 0x0040, code.co_code, code.co_consts, code.co_names, code.co_varnames, filename, name, lineno, code.co_lnotab, (), ())
def __init__(self, source, filename='<template>', encoding='utf-8', errors='strict', unicode_mode=True): if isinstance(source, str): source = source.decode(encoding, errors) node = Parser(tokenize('\n'.join(source.splitlines()), filename), filename).parse() self.code = ModuleCodeGenerator(transform(node, filename)).getCode() self.filename = filename self.encoding = encoding self.errors = errors self.unicode_mode = unicode_mode
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:
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)