From: Shugo Maeda Date: 2011-03-29T18:37:47+09:00 Subject: [ruby-dev:43367] Re: [Ruby 1.9 - Bug #4536][Open] 定数参照について1.8と1.9の違い 前田です。 2011年3月29日17:55 SASADA Koichi : > module A; B = 42; end > A.class_eval{p B} > #=> `block in
': uninitialized constant Module::B (NameError) > > なので,それが動くのはまずいかもしれませんね.少し考えさせてください. 以下のようにCOPY_CREFでフラグを伝搬させるとこの部分に関しては1.8と同じ動作になるようです。 diff --git a/vm_insnhelper.h b/vm_insnhelper.h index 979c342..31ef216 100644 --- a/vm_insnhelper.h +++ b/vm_insnhelper.h @@ -154,6 +154,9 @@ extern VALUE ruby_vm_const_missing_count; (c1)->nd_clss = __tmp_c2->nd_clss; \ (c1)->nd_visi = __tmp_c2->nd_visi;\ (c1)->nd_next = __tmp_c2->nd_next; \ + if (__tmp_c2->flags & NODE_FL_CREF_PUSHED_BY_EVAL) { \ + (c1)->flags |= NODE_FL_CREF_PUSHED_BY_EVAL; \ + } \ } while (0) #define CALL_METHOD(num, blockptr, flag, id, me, recv) do { \ あんまりちゃんと考えてないので副作用があるかも。 > # しかし,なんで Module::B なんだ. こっちはまだ見てませんが、何なんでしょうね…。 -- Shugo Maeda