summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-07-26 11:52:19 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-09-17 11:14:04 +0900
commit178ee1e801acb33d13b3e8a630f6ca4926c68fbc (patch)
treefbc3b2dd31c4a3007580959b79ad08c4dbf36029 /object.c
parent8f41c791b19a47e2dfa39b0a6d12ef964098536a (diff)
downloadruby-178ee1e801acb33d13b3e8a630f6ca4926c68fbc.tar.gz
Already initialized modules cannot be replaced [Bug #17048]
Diffstat (limited to 'object.c')
-rw-r--r--object.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/object.c b/object.c
index c6d9b58d39..5263618697 100644
--- a/object.c
+++ b/object.c
@@ -1766,20 +1766,7 @@ rb_mod_cmp(VALUE mod, VALUE arg)
return INT2FIX(1);
}
-static VALUE
-rb_module_s_alloc(VALUE klass)
-{
- VALUE mod = rb_module_new();
-
- RBASIC_SET_CLASS(mod, klass);
- return mod;
-}
-
-static VALUE
-rb_class_s_alloc(VALUE klass)
-{
- return rb_class_boot(0);
-}
+static VALUE rb_mod_initialize_exec(VALUE module);
/*
* call-seq:
@@ -1810,6 +1797,13 @@ rb_class_s_alloc(VALUE klass)
static VALUE
rb_mod_initialize(VALUE module)
{
+ rb_module_check_initialiable(module);
+ return rb_mod_initialize_exec(module);
+}
+
+static VALUE
+rb_mod_initialize_exec(VALUE module)
+{
if (rb_block_given_p()) {
rb_mod_module_exec(1, &module, module);
}
@@ -1879,7 +1873,7 @@ rb_class_initialize(int argc, VALUE *argv, VALUE klass)
RCLASS_SET_SUPER(klass, super);
rb_make_metaclass(klass, RBASIC(super)->klass);
rb_class_inherited(super, klass);
- rb_mod_initialize(klass);
+ rb_mod_initialize_exec(klass);
return klass;
}