static void knh_write_Method(CTX ctx, knh_OutputStream_t *w, const knh_ClassTBL_t *ct, knh_Method_t *o) { knh_write_TAB(ctx, w); if(Method_isAbstract(o)) { knh_write_ascii(ctx, w, "@Abstract "); } knh_write_type(ctx, w, knh_type_tocid(ctx, knh_ParamArray_rtype(DP(o)->mp), ct->cid)); knh_putc(ctx, w, ' '); if(Method_isStatic(o)) { knh_write_ascii(ctx, w, S_tochar(ct->sname)); knh_putc(ctx, w, '.'); } knh_write_mn(ctx, w, SP(o)->mn); knh_putc(ctx, w, '('); size_t i; for(i = 0; i < knh_Method_psize(o); i++) { knh_param_t *p = knh_ParamArray_get(DP(o)->mp, i); if(i > 0) { knh_write_delim(ctx, w); } knh_write_type(ctx, w, knh_type_tocid(ctx, p->type, ct->cid)); knh_putc(ctx, w, ' '); knh_write_ascii(ctx, w, FN__(p->fn)); } if(ParamArray_isVARGs(DP(o)->mp)) { knh_write_delim(ctx, w); knh_write_dots(ctx, w); } knh_putc(ctx, w, ')'); knh_write_EOL(ctx, w); }
static void knh_stack_writeStackTrace(Ctx *ctx, knh_sfp_t *sfp, knh_OutputStream_t *w) { knh_Method_t *mtd = sfp[K_MTDIDX].callmtd; knh_write_sname(ctx, w, DP(mtd)->cid); if(DP(mtd)->mn != MN_LAMBDA) { int i = 0, psize = knh_Method_psize(mtd); knh_putc(ctx, w, '.'); knh_write_mn(ctx, w, DP(mtd)->mn); knh_putc(ctx, w, '('); for(i = 0; i < psize; i++) { knh_param_t *p = knh_ParamArray_get(DP(mtd)->mp, i); knh_type_t type = knh_type_tocid(ctx, p->type, knh_Object_cid(sfp[0].o)); if(i > 0) { knh_putc(ctx, w, ','); } knh_write_fn(ctx, w, p->fn); knh_putc(ctx, w, '='); if(!knh_write_ndata(ctx, w, type, sfp[i+1].data)) { knh_Method_t *mtdf = knh_getSystemFormatter(ctx, type, MN__k); knh_write_Object(ctx, w, ctx->esp, &mtdf, sfp[i+1].o); } } knh_putc(ctx, w, ')'); } }