From ee3017496ba60ca418b5e54c1f8f5d8b38524a52 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 5 Feb 2021 21:39:44 +0900 Subject: `instance_eval` for classes and modules should behave as `class_eval`. --- src/vm.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index f8b74034e..390ce8aaa 100644 --- a/src/vm.c +++ b/src/vm.c @@ -659,11 +659,21 @@ mrb_value mrb_obj_instance_eval(mrb_state *mrb, mrb_value self) { mrb_value a, b; + struct RClass *c; if (mrb_get_args(mrb, "|S&", &a, &b) == 1) { mrb_raise(mrb, E_NOTIMP_ERROR, "instance_eval with string not implemented"); } - return eval_under(mrb, self, b, mrb_singleton_class_ptr(mrb, self)); + switch (mrb_type(self)) { + case MRB_TT_MODULE: + case MRB_TT_CLASS: + case MRB_TT_ICLASS: + c = mrb_class_ptr(self); + break; + default: + c = mrb_singleton_class_ptr(mrb, self); + } + return eval_under(mrb, self, b, c); } MRB_API mrb_value -- cgit v1.2.3