Fix compatibility issue of class variables.

Singleton class definition do not introduce its own class variable scope
in CRuby/JRuby. So should mruby.

```
module Mod1
  class << Object.new

    C = 1
    @@cv = 1

    p Module.nesting,        # => [#<Class:#<Object:0x55cb16e60a50>>, Mod1]
      constants,             # => [:C]
      class_variables,       # => []
      Mod1.class_variables   # => [:@@cv]
  end
end
```
This commit is contained in:
Yukihiro "Matz" Matsumoto
2019-09-19 15:48:04 +09:00
parent 683baec4f0
commit 15701a32f5
+13 -2
View File
@@ -743,7 +743,13 @@ mrb_vm_cv_get(mrb_state *mrb, mrb_sym sym)
{
struct RClass *c;
c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc);
struct RProc *p = mrb->c->ci->proc;
for (;;) {
c = MRB_PROC_TARGET_CLASS(p);
if (c->tt != MRB_TT_SCLASS) break;
p = p->upper;
}
return mrb_mod_cv_get(mrb, c, sym);
}
@@ -751,8 +757,13 @@ void
mrb_vm_cv_set(mrb_state *mrb, mrb_sym sym, mrb_value v)
{
struct RClass *c;
struct RProc *p = mrb->c->ci->proc;
c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc);
for (;;) {
c = MRB_PROC_TARGET_CLASS(p);
if (c->tt != MRB_TT_SCLASS) break;
p = p->upper;
}
mrb_mod_cv_set(mrb, c, sym, v);
}