aboutsummaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorChris Salzberg <chris@dejimata.com>2022-08-09 22:22:23 +0900
committerShugo Maeda <shugo.maeda@gmail.com>2022-09-24 09:41:15 +0900
commit82ac4a2399516a3ffda750b815c244aad6d38277 (patch)
tree5f4003ea9c974dd75d30dbde7113c9539345a11d /eval.c
parenta74f4cded2ba4183b680c14f5c9aa7151afaad58 (diff)
downloadruby-82ac4a2399516a3ffda750b815c244aad6d38277.tar.gz
Support using at toplevel in wrapped script
Allow refinements to be used at the toplevel within a script that is loaded under a module. Fixes [Bug #18960]
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index cf32a82214..9567f80150 100644
--- a/eval.c
+++ b/eval.c
@@ -1792,10 +1792,12 @@ top_include(int argc, VALUE *argv, VALUE self)
static VALUE
top_using(VALUE self, VALUE module)
{
- const rb_cref_t *cref = rb_vm_cref();
+ const rb_cref_t *cref = CREF_NEXT(rb_vm_cref());;
rb_control_frame_t *prev_cfp = previous_frame(GET_EC());
+ rb_thread_t *th = GET_THREAD();
- if (CREF_NEXT(cref) || (prev_cfp && rb_vm_frame_method_entry(prev_cfp))) {
+ if ((th->top_wrapper ? CREF_NEXT(cref) : cref) ||
+ (prev_cfp && rb_vm_frame_method_entry(prev_cfp))) {
rb_raise(rb_eRuntimeError, "main.using is permitted only at toplevel");
}
if (rb_block_given_p()) {