From: Yusuke ENDOH Date: 2008-09-28T20:42:28+09:00 Subject: [ruby-dev:36616] [Bug:1.9] duplicated when clause 遠藤です。 when 節に同じ値があるときの挙動が 1.8 と 1.9 で異なるようです。 $ ruby18 -e ' case 1 when 1 then p :foo when 1 then p :bar end ' :foo $ ruby19 -e ' case 1 when 1 then p :foo when 1 then p :bar end ' :bar 1.9 のバグではないかと思います。 以下のパッチをコミットしてもいいでしょうか。 Index: compile.c =================================================================== --- compile.c (revision 19604) +++ compile.c (working copy) @@ -1349,7 +1349,9 @@ rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no, "unknown label"); } - rb_hash_aset(map, obj, INT2FIX(lobj->position - (pos+len))); + if (!st_lookup(rb_hash_tbl(map), obj, 0)) { + rb_hash_aset(map, obj, INT2FIX(lobj->position - (pos+len))); + } } generated_iseq[pos + 1 + j] = map; iseq_add_mark_object(iseq, map); -- Yusuke ENDOH