From 5efe77fede8c3d57f8be57f5e5b26ab77b8d9c9c Mon Sep 17 00:00:00 2001 From: Kouichi Nakanishi Date: Thu, 30 Mar 2017 16:16:19 +0900 Subject: Modify class variable definition in singleton class; fix #3539 --- src/variable.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/variable.c') diff --git a/src/variable.c b/src/variable.c index 2e823453f..f5d261dec 100644 --- a/src/variable.c +++ b/src/variable.c @@ -819,12 +819,22 @@ mrb_mod_cv_set(mrb_state *mrb, struct RClass *c, mrb_sym sym, mrb_value v) c = c->super; } - if (!cls->iv) { - cls->iv = iv_new(mrb); + 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); + }else{ + c = cls; + } + + if (!c->iv) { + c->iv = iv_new(mrb); } - mrb_write_barrier(mrb, (struct RBasic*)cls); - iv_put(mrb, cls->iv, sym, v); + mrb_write_barrier(mrb, (struct RBasic*)c); + iv_put(mrb, c->iv, sym, v); } MRB_API void -- cgit v1.2.3