diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-17 16:12:03 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-17 16:12:03 +0000 |
commit | 69dd06ae685b41ed9a77c4b2bdfa5587c12c5019 (patch) | |
tree | c3bf7730029ffff998bca90fb4468ce664480858 /eval.c | |
parent | 2c5463fe99df8868e53817af834f1ecec9875515 (diff) | |
download | ruby-69dd06ae685b41ed9a77c4b2bdfa5587c12c5019.tar.gz |
* 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.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -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 |