diff --git a/test/-ext-/debug/test_debug.rb b/test/-ext-/debug/test_debug.rb index 3804714d0dce9b..bc41c1bb79beb1 100644 --- a/test/-ext-/debug/test_debug.rb +++ b/test/-ext-/debug/test_debug.rb @@ -56,4 +56,20 @@ def test_inspector_open_in_eval binds = inspector_in_eval binds_check binds, bug7635 end + + class MyRelation + include Enumerable + + def each + yield :each_entry + end + end + + def test_lazy_block + x = MyRelation.new.any? do + Bug::Debug.inspector + true + end + assert_equal true, x, '[Bug #15105]' + end end diff --git a/version.h b/version.h index e88b6ab32e1167..cc5f50a49b997b 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "2.5.4" #define RUBY_RELEASE_DATE "2018-11-28" -#define RUBY_PATCHLEVEL 113 +#define RUBY_PATCHLEVEL 114 #define RUBY_RELEASE_YEAR 2018 #define RUBY_RELEASE_MONTH 11 diff --git a/vm_backtrace.c b/vm_backtrace.c index d82d73d9634867..7d6c6753985a58 100644 --- a/vm_backtrace.c +++ b/vm_backtrace.c @@ -1201,6 +1201,9 @@ rb_debug_inspector_open(rb_debug_inspector_func_t func, void *data) enum ruby_tag_type state; volatile VALUE MAYBE_UNUSED(result); + /* escape all env to heap */ + rb_vm_stack_to_heap(ec); + dbg_context.ec = ec; dbg_context.cfp = dbg_context.ec->cfp; dbg_context.backtrace = ec_backtrace_location_ary(ec, 0, 0); diff --git a/vm_exec.h b/vm_exec.h index 29120975ce92d7..2f4b403e9a6547 100644 --- a/vm_exec.h +++ b/vm_exec.h @@ -36,7 +36,7 @@ typedef rb_iseq_t *ISEQ; #endif #define DEBUG_END_INSN() \ - rb_vmdebug_debug_print_post(th, GET_CFP() SC_REGS()); + rb_vmdebug_debug_print_post(ec, GET_CFP() SC_REGS()); #else