diff options
| -rw-r--r-- | src/variable.c | 2 | ||||
| -rw-r--r-- | test/t/module.rb | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/variable.c b/src/variable.c index c98008af7..f130a968f 100644 --- a/src/variable.c +++ b/src/variable.c @@ -949,7 +949,7 @@ mrb_vm_const_get(mrb_state *mrb, mrb_sym sym) klass = mrb_obj_iv_get(mrb, (struct RObject *)c, mrb_intern_lit(mrb, "__attached__")); c2 = mrb_class_ptr(klass); - if (c2->tt == MRB_TT_CLASS) + if (c2->tt == MRB_TT_CLASS || c2->tt == MRB_TT_MODULE) c = c2; } c2 = c; diff --git a/test/t/module.rb b/test/t/module.rb index 6b0632414..cfdca8503 100644 --- a/test/t/module.rb +++ b/test/t/module.rb @@ -849,3 +849,14 @@ assert('module with non-class/module outer raises TypeError') do assert_raise(TypeError) { module 0::M1 end } assert_raise(TypeError) { module []::M2 end } end + +assert('get constant of parent module in singleton class; issue #3568') do + actual = module GetConstantInSingletonTest + EXPECTED = "value" + class << self + EXPECTED + end + end + + assert_equal("value", actual) +end |
