From 82ac4a2399516a3ffda750b815c244aad6d38277 Mon Sep 17 00:00:00 2001 From: Chris Salzberg Date: Tue, 9 Aug 2022 22:22:23 +0900 Subject: 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] --- eval.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'eval.c') 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()) { -- cgit v1.2.1