mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
merge revision(s) 3b7892b6e4
: [Backport #20871]
Fix a bug in rb_include_module that stops nested inclusion into module subclasses
This bug was present since the code was originally added by me
in 3556a834a2
.
Fixes [Bug #20871]
This commit is contained in:
parent
f19831a15d
commit
8506fdfb4a
3 changed files with 14 additions and 2 deletions
2
class.c
2
class.c
|
@ -1194,8 +1194,8 @@ rb_include_module(VALUE klass, VALUE module)
|
||||||
iclass = iclass->next;
|
iclass = iclass->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
int do_include = 1;
|
|
||||||
while (iclass) {
|
while (iclass) {
|
||||||
|
int do_include = 1;
|
||||||
VALUE check_class = iclass->klass;
|
VALUE check_class = iclass->klass;
|
||||||
/* During lazy sweeping, iclass->klass could be a dead object that
|
/* During lazy sweeping, iclass->klass could be a dead object that
|
||||||
* has not yet been swept. */
|
* has not yet been swept. */
|
||||||
|
|
|
@ -784,6 +784,18 @@ class TestModule < Test::Unit::TestCase
|
||||||
assert_equal([:m1, :m0, :m, :sc, :m1, :m0, :c], sc.new.m)
|
assert_equal([:m1, :m0, :m, :sc, :m1, :m0, :c], sc.new.m)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_include_into_module_after_prepend_bug_20871
|
||||||
|
bar = Module.new{def bar; 'bar'; end}
|
||||||
|
foo = Module.new{def foo; 'foo'; end}
|
||||||
|
m = Module.new
|
||||||
|
c = Class.new{include m}
|
||||||
|
m.prepend bar
|
||||||
|
Class.new{include m}
|
||||||
|
m.include foo
|
||||||
|
assert_include c.ancestors, foo
|
||||||
|
assert_equal "foo", c.new.foo
|
||||||
|
end
|
||||||
|
|
||||||
def test_protected_include_into_included_module
|
def test_protected_include_into_included_module
|
||||||
m1 = Module.new do
|
m1 = Module.new do
|
||||||
def other_foo(other)
|
def other_foo(other)
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
|
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
|
||||||
#define RUBY_VERSION_TEENY 6
|
#define RUBY_VERSION_TEENY 6
|
||||||
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
|
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
|
||||||
#define RUBY_PATCHLEVEL 112
|
#define RUBY_PATCHLEVEL 113
|
||||||
|
|
||||||
#include "ruby/version.h"
|
#include "ruby/version.h"
|
||||||
#include "ruby/internal/abi.h"
|
#include "ruby/internal/abi.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue