aboutsummaryrefslogtreecommitdiffstats
path: root/vm_eval.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2022-07-29 16:02:10 +0900
committerKoichi Sasada <ko1@atdot.net>2022-08-01 17:48:05 +0900
commit5bbba76489628f4509495ebf4ba0a7aad4c0b560 (patch)
tree10cdc8fb1474b43122a132501feb05f4032ec271 /vm_eval.c
parent1520936aa760e6b2747d31c37854f22a63591667 (diff)
downloadruby-5bbba76489628f4509495ebf4ba0a7aad4c0b560.tar.gz
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
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c5
1 files changed, 4 insertions, 1 deletions
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