aboutsummaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/eval.c b/eval.c
index 1729079d6d..164703636e 100644
--- a/eval.c
+++ b/eval.c
@@ -1612,12 +1612,19 @@ frame_func_id(rb_control_frame_t *cfp)
if (!iseq) {
return cfp->method_id;
}
- else if (RUBY_VM_IFUNC_P(iseq)) {
- return rb_intern("<ifunc>");
- }
- else {
- return rb_intern(RSTRING_PTR(iseq->name));
+ while (iseq) {
+ if (RUBY_VM_IFUNC_P(iseq)) {
+ return rb_intern("<ifunc>");
+ }
+ if (iseq->defined_method_id) {
+ return iseq->defined_method_id;
+ }
+ if (iseq->local_iseq == iseq) {
+ break;
+ }
+ iseq = iseq->parent_iseq;
}
+ return 0;
}
ID