예제 #1
0
 def toCellPrepend(self,code):
     scope = self.scope
     pre = []
     for parmcell in scope.jy_paramcells:
         syminf = scope.tbl.get(parmcell)
         args = [jast.IntegerConstant(syminf.locals_index),
                 jast.IntegerConstant(syminf.env_index)]
         pre.append(jast.Invoke(self.frame, "to_cell", args))
     if not pre: return code
     pre.append(jast.BlankLine())
     return jast.Block(jast.flatten([pre,code]))
예제 #2
0
    def compile(self, data, filename, name):
        if self.javapackage is not None:
            name = self.javapackage + '.' + name

        data = data + '\n\n'

        mod = PythonModule(name, filename, frozen=self.deep)
        fact = ObjectFactory()
        pi = SrcGenCompiler(mod, fact, options=self.options)
        fact.parent = pi
        code = pi.execstring(data)
        # __file__
        code.insert(
            0,
            jast.Invoke(jast.Identifier('frame'), "setglobal", [
                jast.StringConstant('__file__'),
                mod.getStringConstant(filename)
            ]))
        code.insert(1, jast.BlankLine())
        code = jast.Block(code)
        mod.addMain(code, pi)
        self.addDependencies(mod)
        return mod