summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-03-23 04:14:31 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-03-23 04:14:31 +0000
commit6c2be430400d53832eb05d5b617e495121e9241f (patch)
tree80abe89f64ec3e762f274c6da25385fdd3bfdf1c /eval.c
parent8f5c38d5fd0f2ef165a71f44b9c5410d1e0743bb (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.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/eval.c b/eval.c
index ccdf11530e..827e1f9575 100644
--- a/eval.c
+++ b/eval.c
@@ -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);