diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-04-10 22:02:51 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-04-10 22:02:51 +0900 |
| commit | 9094415acfff11b4590f156eb44cf24483a6fb00 (patch) | |
| tree | 7a3bd2000609a665d2c67f8cc028e7e4ac736fd9 /src/variable.c | |
| parent | 0048dd118a0d57ff87265593819f9e93e05fafed (diff) | |
| download | mruby-9094415acfff11b4590f156eb44cf24483a6fb00.tar.gz mruby-9094415acfff11b4590f156eb44cf24483a6fb00.zip | |
An object attached to a singleton class may not be a class; fix #3587
The fix for #3539 was incomplete.
Diffstat (limited to 'src/variable.c')
| -rw-r--r-- | src/variable.c | 15 |
1 files changed, 12 insertions, 3 deletions
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; |
