示例#1
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()
示例#2
0
 def _nameOp(self, prefix, name):
     if name in runtime_vars:
         return self.emit(prefix + '_GLOBAL', name)
     return ModuleCodeGenerator._nameOp(self, prefix, name)
示例#3
0
 def __init__(self, node, filename):
     ModuleCodeGenerator.__init__(self, transform(node, filename))
示例#4
0
 def initClass(self):
     ModuleCodeGenerator.initClass(self)
     self.__class__.FunctionGen = RestrictedFunctionCodeGenerator
示例#5
0
 def initClass(self):
     ModuleCodeGenerator.initClass(self)
     self.__class__.FunctionGen = RestrictedFunctionCodeGenerator
示例#6
0
 def _nameOp(self, prefix, name):
     if name in runtime_vars:
         return self.emit(prefix + '_GLOBAL', name)
     return ModuleCodeGenerator._nameOp(self, prefix, name)
示例#7
0
 def __init__(self, node, filename):
     ModuleCodeGenerator.__init__(self, transform(node, filename))
示例#8
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)
    return marshal.dumps(code)
示例#9
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)
示例#10
0
    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)