diff options
-rw-r--r-- | test/-ext-/debug/test_debug.rb | 16 | ||||
-rw-r--r-- | version.h | 2 | ||||
-rw-r--r-- | vm_backtrace.c | 3 | ||||
-rw-r--r-- | vm_exec.h | 2 |
4 files changed, 21 insertions, 2 deletions
diff --git a/test/-ext-/debug/test_debug.rb b/test/-ext-/debug/test_debug.rb index 3804714d0d..bc41c1bb79 100644 --- a/test/-ext-/debug/test_debug.rb +++ b/test/-ext-/debug/test_debug.rb @@ -56,4 +56,20 @@ class TestDebug < Test::Unit::TestCase 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 @@ -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 d82d73d963..7d6c675398 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); @@ -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 |