summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-17 16:12:03 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-17 16:12:03 +0000
commit69dd06ae685b41ed9a77c4b2bdfa5587c12c5019 (patch)
treec3bf7730029ffff998bca90fb4468ce664480858 /eval.c
parent2c5463fe99df8868e53817af834f1ecec9875515 (diff)
* eval.c (frame_func_id): return proper method ID.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13082 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
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