mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
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:
+13
-2
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user