diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-02-05 21:39:44 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-02-05 21:39:44 +0900 |
| commit | ee3017496ba60ca418b5e54c1f8f5d8b38524a52 (patch) | |
| tree | 6e7b7e8924936b755ec30d4e308c68eac2967ed4 /src/vm.c | |
| parent | 043fe9d9f5ab13063683881a981f24489d3f7335 (diff) | |
| download | mruby-ee3017496ba60ca418b5e54c1f8f5d8b38524a52.tar.gz mruby-ee3017496ba60ca418b5e54c1f8f5d8b38524a52.zip | |
`instance_eval` for classes and modules should behave as `class_eval`.
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -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 |
