diff options
author | Chris Salzberg <[email protected]> | 2022-08-09 22:22:23 +0900 |
---|---|---|
committer | Shugo Maeda <[email protected]> | 2022-09-24 09:41:15 +0900 |
commit | 82ac4a2399516a3ffda750b815c244aad6d38277 (patch) | |
tree | 5f4003ea9c974dd75d30dbde7113c9539345a11d /eval.c | |
parent | a74f4cded2ba4183b680c14f5c9aa7151afaad58 (diff) |
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]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6226
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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()) { |