summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--class.c2
-rw-r--r--test/ruby/test_module.rb5
3 files changed, 11 insertions, 1 deletions
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 <nobu@ruby-lang.org>
+
+ * 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 <nobu@ruby-lang.org>
* 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