From 5bbba76489628f4509495ebf4ba0a7aad4c0b560 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Fri, 29 Jul 2022 16:02:10 +0900 Subject: respect current frame of `rb_eval_string` `self` is nearest Ruby method's `self`. If there is no ruby frame, use toplevel `self` (`main`). https://bugs.ruby-lang.org/issues/18780 --- vm_eval.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'vm_eval.c') diff --git a/vm_eval.c b/vm_eval.c index e490e4e32d..c7669cbb85 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -1828,7 +1828,10 @@ VALUE ruby_eval_string_from_file(const char *str, const char *filename) { VALUE file = filename ? rb_str_new_cstr(filename) : 0; - return eval_string_with_cref(rb_vm_top_self(), rb_str_new2(str), NULL, file, 1); + rb_execution_context_t *ec = GET_EC(); + rb_control_frame_t *cfp = ec ? rb_vm_get_ruby_level_next_cfp(ec, ec->cfp) : NULL; + VALUE self = cfp ? cfp->self : rb_vm_top_self(); + return eval_string_with_cref(self, rb_str_new2(str), NULL, file, 1); } VALUE -- cgit v1.2.1