From 9b8b864be15c2f994ed14165e9d1110a648488b6 Mon Sep 17 00:00:00 2001 From: dearblue Date: Sun, 31 Mar 2024 09:53:16 +0900 Subject: [PATCH] Arranging `each_backtrace()` Highlights are: - `Integrate the blocks `if (!ci->proc || MRB_PROC_CFUNC_P(ci->proc))` and `if (loc.irep == NULL)`. - Folding some other conditionals. - Assertions ensure that procs are not aliases. --- src/backtrace.c | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/backtrace.c b/src/backtrace.c index 9e66017f8..d8e78ea95 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -45,42 +45,32 @@ pack_backtrace(mrb_state *mrb, ptrdiff_t ciidx, struct mrb_backtrace_location *p const mrb_code *pc; ci = &mrb->c->cibase[i]; + loc.method_id = ci->mid; - if (!ci->proc || MRB_PROC_CFUNC_P(ci->proc)) { - if (!ci->mid) continue; - loc.irep = NULL; - } - else { + if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc)) { + mrb_assert(!MRB_PROC_ALIAS_P(ci->proc)); loc.irep = ci->proc->body.irep; if (!loc.irep) continue; if (!loc.irep->debug_info) continue; - if (mrb->c->cibase[i].pc) { - pc = &mrb->c->cibase[i].pc[-1]; - } - else { - continue; - } + if (!ci->pc) continue; + pc = &ci->pc[-1]; loc.idx = (uint32_t)(pc - loc.irep->iseq); } - loc.method_id = ci->mid; - if (loc.irep == NULL) { + else { + if (!loc.method_id) continue; + loc.irep = NULL; for (ptrdiff_t j=i-1; j >= 0; j--) { ci = &mrb->c->cibase[j]; if (!ci->proc) continue; if (MRB_PROC_CFUNC_P(ci->proc)) continue; + mrb_assert(!MRB_PROC_ALIAS_P(ci->proc)); const mrb_irep *irep = ci->proc->body.irep; if (!irep) continue; if (!irep->debug_info) continue; - - if (mrb->c->cibase[j].pc) { - pc = &mrb->c->cibase[j].pc[-1]; - } - else { - continue; - } - + if (!ci->pc) continue; + pc = &ci->pc[-1]; loc.irep = irep; loc.idx = (uint32_t)(pc - irep->iseq); break;