diff --git a/ChangeLog b/ChangeLog index 310f6250a3..1a49e9b2ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Jun 27 21:01:32 2012 Nobuyoshi Nakada + + * class.c (class_instance_method_list): m_tbl in prepended + class/module is NULL. [ruby-core:45915][Bug #6655] + Wed Jun 27 16:48:48 2012 Nobuyoshi Nakada * class.c (rb_prepend_module): prepend module into another module. diff --git a/class.c b/class.c index fc3b483735..099f016d97 100644 --- a/class.c +++ b/class.c @@ -925,7 +925,7 @@ class_instance_method_list(int argc, VALUE *argv, VALUE mod, int obj, int (*func list = st_init_numtable(); for (; mod; mod = RCLASS_SUPER(mod)) { - st_foreach(RCLASS_M_TBL(mod), method_entry_i, (st_data_t)list); + if (RCLASS_M_TBL(mod)) st_foreach(RCLASS_M_TBL(mod), method_entry_i, (st_data_t)list); if (BUILTIN_TYPE(mod) == T_ICLASS) continue; if (obj && FL_TEST(mod, FL_SINGLETON)) continue; if (!recur) break; diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index decb217289..5826ed0269 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -1270,4 +1270,9 @@ class TestModule < Test::Unit::TestCase expected = [:M2,[:M3,[:C1,[:M4,[:M1,[:C0,[:M0],:C0],:M1],:M4],:C1],:M3],:M2] assert_equal(expected, obj.m1) end + + def test_prepend_instance_methods + bug6655 = '[ruby-core:45915]' + assert_equal(Object.instance_methods, Class.new {prepend Module.new}.instance_methods, bug6655) + end end