From a79c59472df38297c246b27713c277f2edaefa7a Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Wed, 5 Jan 2022 16:12:31 -0800 Subject: Allow include before calling Module#initialize This is to allow Module subclasses that include modules before calling super in the subclass's initialize. Remove rb_module_check_initializable from Module#initialize. Module#initialize only calls module_exec if a block is passed, it doesn't have other issues that would cause problems if called multiple times or with an already initialized module. Move initialization of super to Module#allocate, though I'm not sure it is required there. However, it's needed to be removed from Module#initialize for this to work. Fixes [Bug #18292] --- test/ruby/test_module.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'test/ruby') diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index e1524a5d81..b84a090fce 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -519,6 +519,16 @@ class TestModule < Test::Unit::TestCase assert_raise(ArgumentError) { Module.new { include } } end + def test_include_before_initialize + m = Class.new(Module) do + def initialize(...) + include Enumerable + super + end + end.new + assert_equal(true, m < Enumerable) + end + def test_prepend_self m = Module.new assert_equal([m], m.ancestors) -- cgit v1.2.3