summaryrefslogtreecommitdiffstats
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
commit430b88e65390aaa6867e91b1c467facd0d0e21b7 (patch)
treec3bf7730029ffff998bca90fb4468ce664480858 /eval.c
parent74995a2b3203d34f61c6c235a06f9715edc73e2f (diff)
downloadruby-430b88e65390aaa6867e91b1c467facd0d0e21b7.tar.gz
ruby-430b88e65390aaa6867e91b1c467facd0d0e21b7.tar.xz
ruby-430b88e65390aaa6867e91b1c467facd0d0e21b7.zip
* eval.c (frame_func_id): return proper method ID.
git-svn-id: http://svn.ruby-lang.org/repos/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 1729079d6..164703636 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