From: "NAKAMURA, Hiroshi" Date: 2002-11-13T18:23:08+09:00 Subject: [ruby-dev:18767] Re: klass == 0 as ruby_top_self in call_trace_func なひです。 > From: Yukihiro Matsumoto [mailto:matz@ruby-lang.org] > Sent: Wednesday, November 13, 2002 6:08 PM > |トップレベルではruby_frame->last_classが0になっているため、 > |call_trace_funcから呼び出されるtrace_funcのklassが0 => false > |になります。 > > えーと、top_selfがklassになっていいんでしたっけ? (うろおぼえ) > いいんなら、問題ないです。 ruby内部については、ruby_frame->last_classにtop_selfを 代入するわけではないので問題ありません(念のため)。 が、set_trace_funcしたproc側としては。。。klassに top_selfが来たら変ですね。すいません。 とすると、ここはこうすべきなのかな。 「klassなし」はfalse? nil? not reachedはどうcrashさせるべき? --- eval.c.prev 2002-11-13 09:14:06.000000000 +0900 +++ eval.c 2002-11-13 18:20:38.000000000 +0900 @@ -2107,14 +2107,20 @@ call_trace_func(event, node, self, id, k if (klass) { if (TYPE(klass) == T_ICLASS) { klass = RBASIC(klass)->klass; } else if (FL_TEST(klass, FL_SINGLETON)) { klass = self; } + else { + /* not reached */ + } + } + else { + klass = Qnil; } PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { srcfile = rb_str_new2(ruby_sourcefile?ruby_sourcefile:"(ruby)"); proc_invoke(trace_func, rb_ary_new3(6, rb_str_new2(event), srcfile, INT2FIX(ruby_sourceline),