diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | class.c | 3 | ||||
-rw-r--r-- | test/ruby/test_module.rb | 7 |
3 files changed, 14 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Wed May 8 22:46:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * class.c (rb_mod_included_modules): should not include the original + module itself. [ruby-core:53158] [Bug #8025] + Wed May 8 17:43:55 2013 NARUSE, Yui <naruse@ruby-lang.org> * io.c (rb_io_ext_int_to_encs): ignore internal encoding if external @@ -851,9 +851,10 @@ rb_mod_included_modules(VALUE mod) { VALUE ary = rb_ary_new(); VALUE p; + VALUE origin = RCLASS_ORIGIN(mod); for (p = RCLASS_SUPER(mod); p; p = RCLASS_SUPER(p)) { - if (BUILTIN_TYPE(p) == T_ICLASS) { + if (p != origin && BUILTIN_TYPE(p) == T_ICLASS) { rb_ary_push(ary, RBASIC(p)->klass); } } diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index f27c11072a..45b5056927 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -1548,6 +1548,13 @@ class TestModule < Test::Unit::TestCase assert_nothing_raised(NoMethodError, bug8005) {a.send :foo} end + def test_prepend_included_modules + bug8025 = '[ruby-core:53158] [Bug #8025]' + mixin = labeled_module("mixin") + c = labeled_module("c") {prepend mixin} + assert_not_include(c.included_modules, c, bug8025) + end + def test_class_variables m = Module.new m.class_variable_set(:@@foo, 1) |