void knh_write_uline(CTX ctx, kOutputStream *w, kline_t uline) { kuri_t uri = ULINE_uri(uline); kuintptr_t line = ULINE_line(uline); if(uline != 0 && uri != URI_unknown && line != 0) { knh_write_cline(ctx, w, FILENAME__(uri), line); } }
void knh_write_mline(CTX ctx, kOutputStream *w, kmethodn_t mn, kline_t uline) { kuri_t uri = ULINE_uri(uline); kuintptr_t line = ULINE_line(uline); if(uline != 0 && uri != URI_unknown && line != 0) { if(mn == MN_) { knh_write_cline(ctx, w, FILENAME__(uri), line); } else { knh_putc(ctx, w, '('); knh_write_mn(ctx, w, mn); knh_putc(ctx, w, ':'); knh_write_dfmt(ctx, w, K_INTPTR_FMT, line); knh_putc(ctx, w, ')'); knh_putc(ctx, w, ' '); } } }
static knh_sfp_t *knh_Exception_addStackTrace(Ctx *ctx, knh_Exception_t *e, knh_sfp_t *sfp) { knh_intptr_t shift = sfp[K_SHIFTIDX].shift; knh_sfp_t *psfp = sfp - shift; if(ctx->stack < psfp && psfp < sfp) { if(psfp[K_MTDIDX].callmtd != NULL && isCalledMethod(ctx, psfp + K_MTDIDX)) { knh_cwb_t cwbbuf, *cwb = knh_cwb_open(ctx, &cwbbuf); knh_opline_t *pc = psfp[K_SHIFTIDX].pc; knh_Method_t *mtd = psfp[K_MTDIDX].callmtd; int linenum = pc->line; const char *file = knh_Method_file(ctx, mtd); knh_write_cline(ctx, cwb->w, file, linenum); knh_putc(ctx, cwb->w, ':'); knh_stack_writeStackTrace(ctx, sfp, cwb->w); if(DP(e)->tracesNULL == NULL) { KNH_INITv(DP(e)->tracesNULL, new_Array(ctx, CLASS_String, 0)); } knh_Array_add(ctx, DP(e)->tracesNULL, knh_cwb_newString(ctx, cwb)); sfp = psfp; } } return sfp - 1; }
void knh_write_uline(Ctx *ctx, knh_OutputStream_t *w, knh_uri_t uri, long line) { knh_write_cline(ctx, w, FILENAME__(uri), line); }