From 65285bf673914424e960671d1d35e357c455985e Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 24 Sep 2021 00:55:11 +0900 Subject: Consider modified modules initialized [Bug #18185] --- class.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'class.c') diff --git a/class.c b/class.c index 46d44085d5..8e37f8a93e 100644 --- a/class.c +++ b/class.c @@ -357,6 +357,15 @@ RMODULE_UNINITIALIZED(VALUE module) return RCLASS_SUPER(module) == rb_cBasicObject; } +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) { @@ -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"); } -- cgit v1.2.1