Merge pull request #2521 from kou/fix-class-variable-and-singleton-class-method

Fix a bug that class variable can't be referenced from class method
This commit is contained in:
Yukihiro "Matz" Matsumoto
2014-08-09 15:52:41 +09:00
2 changed files with 22 additions and 0 deletions
+9
View File
@@ -2175,6 +2175,15 @@ RETRY_TRY_BLOCK:
}
else {
p = mrb_proc_new(mrb, irep->reps[GETARG_b(i)]);
if (c & OP_L_METHOD) {
if (p->target_class->tt == MRB_TT_SCLASS) {
mrb_value klass;
klass = mrb_obj_iv_get(mrb,
(struct RObject *)p->target_class,
mrb_intern_lit(mrb, "__attached__"));
p->target_class = mrb_class_ptr(klass);
}
}
}
if (c & OP_L_STRICT) p->flags |= MRB_PROC_STRICT;
regs[GETARG_A(i)] = mrb_obj_value(p);
+13
View File
@@ -370,3 +370,16 @@ assert('clone Class') do
Foo.clone.new.func
end
assert('class variable and class << self style class method') do
class ClassVariableTest
@@class_variable = "value"
class << self
def class_variable
@@class_variable
end
end
end
assert_equal("value", ClassVariableTest.class_variable)
end