From: Yukihiro Matsumoto Date: 2011-03-30T08:28:53+09:00 Subject: [ruby-dev:43370] Re: [Ruby 1.9 - Bug #4536][Open] 定数参照について1.8と1.9の違い まつもと ゆきひろです テストでエラーが増えないようならコミットしていただけませんか? In message "Re: [ruby-dev:43367] Re: [Ruby 1.9 - Bug #4536][Open] 定数参照について1.8と1.9の違い" on Tue, 29 Mar 2011 18:37:47 +0900, Shugo Maeda writes: | |前田です。 | |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