summaryrefslogtreecommitdiffhomepage
path: root/src/variable.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/variable.c')
-rw-r--r--src/variable.c18
1 files changed, 14 insertions, 4 deletions
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