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 | 430b88e65390aaa6867e91b1c467facd0d0e21b7 (patch) | |
tree | c3bf7730029ffff998bca90fb4468ce664480858 /eval.c | |
parent | 74995a2b3203d34f61c6c235a06f9715edc73e2f (diff) | |
download | ruby-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.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 |