diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-03-23 04:14:31 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-03-23 04:14:31 +0000 |
commit | 6c2be430400d53832eb05d5b617e495121e9241f (patch) | |
tree | 80abe89f64ec3e762f274c6da25385fdd3bfdf1c /eval.c | |
parent | 8f5c38d5fd0f2ef165a71f44b9c5410d1e0743bb (diff) |
2000-03-23
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -1736,7 +1736,10 @@ call_trace_func(event, file, line, self, id, klass) ruby_frame->file = ruby_sourcefile = file; } if (klass) { - if (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) { + if (TYPE(klass) == T_ICLASS) { + klass = RBASIC(klass)->klass; + } + else if (FL_TEST(klass, FL_SINGLETON)) { klass = self; } } @@ -3875,7 +3878,7 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper) line = ruby_sourceline; } - call_trace_func("c-call", 0, 0, 0, id, 0); + call_trace_func("c-call", 0, 0, recv, id, klass); PUSH_TAG(PROT_FUNC); if ((state = EXEC_TAG()) == 0) { result = call_cfunc(body->nd_cfnc, recv, len, argc, argv); @@ -4469,7 +4472,9 @@ exec_under(func, under, args) ruby_frame->last_class = _frame.prev->last_class; ruby_frame->argc = _frame.prev->argc; ruby_frame->argv = _frame.prev->argv; - ruby_frame->cbase = (VALUE)rb_node_newnode(NODE_CREF,under,0,cbase); + if (RNODE(ruby_frame->cbase)->nd_clss != under) { + ruby_frame->cbase = (VALUE)rb_node_newnode(NODE_CREF,under,0,ruby_frame->cbase); + } mode = scope_vmode; SCOPE_SET(SCOPE_PUBLIC); PUSH_TAG(PROT_NONE); |