diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-07-26 11:52:19 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-17 11:14:04 +0900 |
commit | 178ee1e801acb33d13b3e8a630f6ca4926c68fbc (patch) | |
tree | fbc3b2dd31c4a3007580959b79ad08c4dbf36029 /object.c | |
parent | 8f41c791b19a47e2dfa39b0a6d12ef964098536a (diff) | |
download | ruby-178ee1e801acb33d13b3e8a630f6ca4926c68fbc.tar.gz |
Already initialized modules cannot be replaced [Bug #17048]
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 24 |
1 files changed, 9 insertions, 15 deletions
@@ -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; } |