Esempio n. 1
0
    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
Esempio n. 2
0
 def compile(self, display=0):
     tree = self._get_tree()
     gen = ModuleCodeGenerator(tree)
     if display:
         import pprint
         print pprint.pprint(tree)
     self.code = gen.getCode()
Esempio n. 3
0
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, (), ())
Esempio n. 4
0
 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
Esempio n. 5
0
        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:
Esempio n. 6
0
        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)