From b5cacec3e752bcbdaa2d9693cd2f727f7e1504ec Mon Sep 17 00:00:00 2001 From: tompng Date: Sun, 22 Sep 2024 03:36:27 +0900 Subject: [PATCH] Use correct binding in debug mode In debug command, IRB's context was using wrong binding. Some code colorization, command detection failed because binding.local_variable returned wrong value. --- lib/irb/debug/ui.rb | 2 +- test/irb/test_debugger_integration.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/irb/debug/ui.rb b/lib/irb/debug/ui.rb index 307097b8c..7a1cd6dd1 100644 --- a/lib/irb/debug/ui.rb +++ b/lib/irb/debug/ui.rb @@ -56,7 +56,7 @@ def puts str = nil def readline _ setup_interrupt do tc = DEBUGGER__::SESSION.instance_variable_get(:@tc) - cmd = @irb.debug_readline(tc.current_frame.binding || TOPLEVEL_BINDING) + cmd = @irb.debug_readline(tc.current_frame.eval_binding || TOPLEVEL_BINDING) case cmd when nil # when user types C-d diff --git a/test/irb/test_debugger_integration.rb b/test/irb/test_debugger_integration.rb index 8b1bddea1..45ffb2a52 100644 --- a/test/irb/test_debugger_integration.rb +++ b/test/irb/test_debugger_integration.rb @@ -365,6 +365,23 @@ def bar assert_include(output, "InputMethod: RelineInputMethod") end + def test_irb_command_can_check_local_variables + write_ruby <<~'ruby' + binding.irb + ruby + + output = run_ruby_file do + type "debug" + type 'foobar = IRB' + type "show_source foobar.start" + type "show_source = 'Foo'" + type "show_source + 'Bar'" + type "continue" + end + assert_include(output, "def start(ap_path = nil)") + assert_include(output, '"FooBar"') + end + def test_help_command_is_delegated_to_the_debugger write_ruby <<~'ruby' binding.irb