diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-24 00:55:11 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-24 08:29:00 +0900 |
commit | 65285bf673914424e960671d1d35e357c455985e (patch) | |
tree | 551c2e9aac3b017d462fadd00c924ddfbeec5ee0 /class.c | |
parent | 854fe9d1c1d52037a0c04d75b75765f25f028d1e (diff) |
Consider modified modules initialized [Bug #18185]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4883
Diffstat (limited to 'class.c')
-rw-r--r-- | class.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -358,6 +358,15 @@ RMODULE_UNINITIALIZED(VALUE module) } void +rb_module_set_initialized(VALUE mod) +{ + if (RMODULE_UNINITIALIZED(mod)) { + RB_OBJ_WRITE(mod, &RCLASS(mod)->super, 0); + /* no more re-initialization */ + } +} + +void rb_module_check_initializable(VALUE mod) { if (!RMODULE_UNINITIALIZED(mod)) { @@ -916,10 +925,7 @@ ensure_includable(VALUE klass, VALUE module) { rb_class_modify_check(klass); Check_Type(module, T_MODULE); - if (RMODULE_UNINITIALIZED(module)) { - RB_OBJ_WRITE(module, &RCLASS(module)->super, 0); - /* no more re-initialization */ - } + rb_module_set_initialized(module); if (!NIL_P(rb_refinement_module_get_refined_class(module))) { rb_raise(rb_eArgError, "refinement module is not allowed"); } |