Exemplo n.º 1
0
    def generate(self):
        typeinfo0 = self.get_aux("typeinfo0")

        basic = JavaTemplate("", start="ClassBodyDeclarations")

        bindings = self.global_bindings.copy()
        if hasattr(self, "type_as"):
            basic = basic + JavaTemplate(
                "public static final Class exposed_as = `as.class;", start="ClassBodyDeclarations"
            )
            bindings["as"] = self.type_as
        else:
            basic = basic + JavaTemplate(
                "public static final String exposed_name = `strfy`(`name);", start="ClassBodyDeclarations"
            )
            bindings["name"] = self.type_name
            if hasattr(self, "type_base_class"):
                basic = basic + JavaTemplate(
                    "public static final Class exposed_base = `base.class;", start="ClassBodyDeclarations"
                )
                bindings["base"] = self.type_base_class

        typeinfo = typeinfo0

        setup = JavaTemplate("", start="BlockStatements")
        if not self.no_setup:
            typeinfo1 = self.get_aux("typeinfo1")

            pair = self.get_aux("pair")
            for statement in self.statements:
                setup = pair.tbind({"trailer": setup, "last": statement})

            typeinfo = typeinfo.tfree() + typeinfo1.tfree()

        return typeinfo.tnaked().texpand({"basic": basic.tbind(bindings), "setup": setup}, nindent=1)
Exemplo n.º 2
0
    def handle_expose_meth_sig(self, sig, call_meths_bindings, body,
                               body_bindings):
        proto_body_jt = JavaTemplate(body)
        everything, dfls = self.parse_sig('expose_meth', sig)

        dfls = map(JavaTemplate, dfls)

        tot = len(everything)
        rng = len(dfls) + 1

        for dflc in range(rng):
            new_body_bindings = body_bindings.copy()
            args = self.NOARGS
            all = self.EMPTYALL
            j = 0
            conv_errors = {}
            for k, tg in everything[:tot - dflc]:
                argj = "arg%d" % j
                args += JavaTemplate("void(PyObject %s)" % argj)
                new_body_bindings[argj], err = getattr(self,
                                                       'arg_%s' % k)(argj, j,
                                                                     tg)
                all += JavaTemplate(
                    jast_make(jast.Expressions,
                              [new_body_bindings[argj].fragment]))
                if err:
                    conv_errors.setdefault(err, []).append(j)
                j += 1
            new_body_bindings['all'] = all
            for dv in dfls[rng - 1 - dflc:]:
                new_body_bindings["arg%d" % j] = dv
                j += 1
            for deleg_templ_name in ('void', 'deleg', 'vdeleg', 'rdeleg',
                                     'ideleg', 'ldeleg', 'bdeleg', 'sdeleg',
                                     'udeleg'):
                deleg_templ = self.get_aux(deleg_templ_name)
                new_body_bindings[deleg_templ_name] = deleg_templ.tbind(
                    new_body_bindings)
            body_jt = proto_body_jt.tbind(new_body_bindings)
            if conv_errors:
                cases = JavaTemplate(jast_make(
                    jast.SwitchBlockStatementGroups))
                for err, indexes in conv_errors.items():
                    suite = JavaTemplate('msg = "%s"; break; ' %
                                         err).fragment.BlockStatements
                    cases += java_templating.switchgroup(indexes, suite)
                bindings = {'cases': cases, 'unsafe_body': body_jt}
                body_jt = self.get_aux('conv_error_handling').tbind(bindings)

            call_meths_bindings['body%d' % dflc] = body_jt
            call_meths_bindings['args%d' % dflc] = args

        inst_call_meths = self.make_call_meths(rng, call_meths_bindings)

        return inst_call_meths, tot - rng + 1, tot
Exemplo n.º 3
0
    def handle_expose_meth_sig(self, sig, call_meths_bindings, body, body_bindings):
        proto_body_jt = JavaTemplate(body)
        everything, dfls = self.parse_sig("expose_meth", sig)

        dfls = map(JavaTemplate, dfls)

        tot = len(everything)
        rng = len(dfls) + 1

        for dflc in range(rng):
            new_body_bindings = body_bindings.copy()
            args = self.NOARGS
            all = self.EMPTYALL
            j = 0
            conv_errors = {}
            for k, tg in everything[: tot - dflc]:
                argj = "arg%d" % j
                args += JavaTemplate("void(PyObject %s)" % argj)
                new_body_bindings[argj], err = getattr(self, "arg_%s" % k)(argj, j, tg)
                all += JavaTemplate(jast_make(jast.Expressions, [new_body_bindings[argj].fragment]))
                if err:
                    conv_errors.setdefault(err, []).append(j)
                j += 1
            new_body_bindings["all"] = all
            for dv in dfls[rng - 1 - dflc :]:
                new_body_bindings["arg%d" % j] = dv
                j += 1
            for deleg_templ_name in (
                "void",
                "deleg",
                "vdeleg",
                "rdeleg",
                "ideleg",
                "ldeleg",
                "bdeleg",
                "sdeleg",
                "udeleg",
            ):
                deleg_templ = self.get_aux(deleg_templ_name)
                new_body_bindings[deleg_templ_name] = deleg_templ.tbind(new_body_bindings)
            body_jt = proto_body_jt.tbind(new_body_bindings)
            if conv_errors:
                cases = JavaTemplate(jast_make(jast.SwitchBlockStatementGroups))
                for err, indexes in conv_errors.items():
                    suite = JavaTemplate('msg = "%s"; break; ' % err).fragment.BlockStatements
                    cases += java_templating.switchgroup(indexes, suite)
                bindings = {"cases": cases, "unsafe_body": body_jt}
                body_jt = self.get_aux("conv_error_handling").tbind(bindings)

            call_meths_bindings["body%d" % dflc] = body_jt
            call_meths_bindings["args%d" % dflc] = args

        inst_call_meths = self.make_call_meths(rng, call_meths_bindings)

        return inst_call_meths, tot - rng + 1, tot
Exemplo n.º 4
0
 def make_call_meths(self,n,bindings):
     try:
         return self.call_meths_cache[n].tbind(bindings)
     except KeyError:
         templ = "`call_meths`(`args%d,`body%d);"
         defs = []
         for i in range(n):
             defs.append(templ % (i,i))
         defs = '\n'.join(defs)
         jtempl = JavaTemplate(defs,start='ClassBodyDeclarations')
         self.call_meths_cache[n] = jtempl
         return jtempl.tbind(bindings)
Exemplo n.º 5
0
 def make_call_meths(self, n, bindings):
     try:
         return self.call_meths_cache[n].tbind(bindings)
     except KeyError:
         templ = "`call_meths`(`args%d,`body%d);"
         defs = []
         for i in range(n):
             defs.append(templ % (i, i))
         defs = '\n'.join(defs)
         jtempl = JavaTemplate(defs, start='ClassBodyDeclarations')
         self.call_meths_cache[n] = jtempl
         return jtempl.tbind(bindings)
Exemplo n.º 6
0
 def dire_expose_new_mutable(self,name,parm,body):
     expose_new = self.get_aux('expose_new')
     parms = parm.split()
     body_bindings = self.global_bindings.copy()
     if body is None:
         body = self.get_aux('mutable_new_body')
     else:
         body = JavaTemplate(body)
     if not parms:
         parms = ['-1','-1']
     else:
         if len(parms) != 2:
             self.invalid(name,parm)
     body_bindings['minargs'] = JavaTemplate(parms[0])
     body_bindings['maxargs'] = JavaTemplate(parms[1])
     body = body.tbind(body_bindings)
     templ = expose_new.tbind(body_bindings)
     self.statements.append(templ.tbind({'body': body}))
Exemplo n.º 7
0
 def dire_expose_new_mutable(self, name, parm, body):
     expose_new = self.get_aux('expose_new')
     parms = parm.split()
     body_bindings = self.global_bindings.copy()
     if body is None:
         body = self.get_aux('mutable_new_body')
     else:
         body = JavaTemplate(body)
     if not parms:
         parms = ['-1', '-1']
     else:
         if len(parms) != 2:
             self.invalid(name, parm)
     body_bindings['minargs'] = JavaTemplate(parms[0])
     body_bindings['maxargs'] = JavaTemplate(parms[1])
     body = body.tbind(body_bindings)
     templ = expose_new.tbind(body_bindings)
     self.statements.append(templ.tbind({'body': body}))
Exemplo n.º 8
0
 def dire_expose_new_mutable(self, name, parm, body):
     expose_new = self.get_aux("expose_new")
     parms = parm.split()
     body_bindings = self.global_bindings.copy()
     if body is None:
         body = self.get_aux("mutable_new_body")
     else:
         body = JavaTemplate(body)
     if not parms:
         parms = ["-1", "-1"]
     else:
         if len(parms) != 2:
             self.invalid(name, parm)
     body_bindings["minargs"] = JavaTemplate(parms[0])
     body_bindings["maxargs"] = JavaTemplate(parms[1])
     body = body.tbind(body_bindings)
     templ = expose_new.tbind(body_bindings)
     self.statements.append(templ.tbind({"body": body}))
Exemplo n.º 9
0
    def generate(self):
        typeinfo0 = self.get_aux('typeinfo0')

        basic = JavaTemplate("", start='ClassBodyDeclarations')

        bindings = self.global_bindings.copy()
        if hasattr(self, 'type_as'):
            basic = (basic + JavaTemplate(
                "public static final Class exposed_as = `as.class;",
                start='ClassBodyDeclarations'))
            bindings['as'] = self.type_as
        else:
            basic = (basic + JavaTemplate(
                "public static final String exposed_name = `strfy`(`name);",
                start='ClassBodyDeclarations'))
            bindings['name'] = self.type_name
            if hasattr(self, 'type_base_class'):
                basic = (basic + JavaTemplate(
                    "public static final Class exposed_base = `base.class;",
                    start='ClassBodyDeclarations'))
                bindings['base'] = self.type_base_class

        typeinfo = typeinfo0

        setup = JavaTemplate("", start='BlockStatements')
        if not self.no_setup:
            typeinfo1 = self.get_aux('typeinfo1')

            pair = self.get_aux('pair')
            for statement in self.statements:
                setup = pair.tbind({'trailer': setup, 'last': statement})

            typeinfo = typeinfo.tfree() + typeinfo1.tfree()

        return typeinfo.tnaked().texpand(
            {
                'basic': basic.tbind(bindings),
                'setup': setup
            }, nindent=1)
Exemplo n.º 10
0
    def generate(self):
        typeinfo0 = self.get_aux('typeinfo0')

        basic = JavaTemplate("",start='ClassBodyDeclarations')
        
        bindings = self.global_bindings.copy()
        if hasattr(self,'type_as'):
            basic = (basic + 
              JavaTemplate("public static final Class exposed_as = `as.class;",
                           start = 'ClassBodyDeclarations'))
            bindings['as'] = self.type_as
        else:
            basic = (basic + 
              JavaTemplate(
                "public static final String exposed_name = `strfy`(`name);",
                start='ClassBodyDeclarations'))
            bindings['name'] = self.type_name
            if hasattr(self,'type_base_class'):
               basic = (basic + 
                 JavaTemplate(
                   "public static final Class exposed_base = `base.class;",
                   start='ClassBodyDeclarations'))
               bindings['base'] = self.type_base_class

        typeinfo = typeinfo0
        
        setup = JavaTemplate("",start='BlockStatements')
        if not self.no_setup:
            typeinfo1 = self.get_aux('typeinfo1')
            
            pair = self.get_aux('pair')
            for statement in self.statements:
                setup = pair.tbind({'trailer': setup, 'last': statement})
            
            typeinfo = typeinfo.tfree() + typeinfo1.tfree()

        return typeinfo.tnaked().texpand({'basic': basic.tbind(bindings),
                                         'setup': setup},nindent=1)