From 9094415acfff11b4590f156eb44cf24483a6fb00 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 10 Apr 2017 22:02:51 +0900 Subject: An object attached to a singleton class may not be a class; fix #3587 The fix for #3539 was incomplete. --- src/variable.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/variable.c') diff --git a/src/variable.c b/src/variable.c index f130a968f..e639eeb50 100644 --- a/src/variable.c +++ b/src/variable.c @@ -821,10 +821,19 @@ mrb_mod_cv_set(mrb_state *mrb, struct RClass *c, mrb_sym sym, mrb_value v) if (cls && cls->tt == MRB_TT_SCLASS) { mrb_value klass; - klass = mrb_obj_iv_get(mrb, (struct RObject*)cls, - mrb_intern_lit(mrb, "__attached__")); - c = mrb_class_ptr(klass); + klass = mrb_obj_iv_get(mrb, (struct RObject*)cls, + mrb_intern_lit(mrb, "__attached__")); + switch (mrb_type(klass)) { + case MRB_TT_CLASS: + case MRB_TT_MODULE: + case MRB_TT_SCLASS: + c = mrb_class_ptr(klass); + break; + default: + c = cls; + break; + } } else{ c = cls; -- cgit v1.2.3