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)
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
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
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)
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)
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}))
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}))
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}))
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)
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)