From 62691384f8db5253c1454f37b2c688ab8d2c28b7 Mon Sep 17 00:00:00 2001 From: tomoya ishida Date: Wed, 28 Jun 2023 05:43:48 +0900 Subject: [PATCH] Remove keyword exception from Context#evaluate because the value is always nil (#617) --- lib/irb.rb | 23 ++++++++--------------- lib/irb/context.rb | 9 +-------- test/irb/test_context.rb | 14 -------------- 3 files changed, 9 insertions(+), 37 deletions(-) diff --git a/lib/irb.rb b/lib/irb.rb index e72356b9c..0e26e7940 100644 --- a/lib/irb.rb +++ b/lib/irb.rb @@ -506,8 +506,6 @@ def run(conf = IRB.conf) # Evaluates input for this session. def eval_input - exc = nil - @scanner.set_prompt do |ltype, indent, continue, line_no| if ltype @@ -567,18 +565,18 @@ def eval_input is_assignment = assignment_expression?(line) if IRB.conf[:MEASURE] && !IRB.conf[:MEASURE_CALLBACKS].empty? result = nil - last_proc = proc{ result = evaluate_line(line, line_no, exception: exc) } + last_proc = proc{ result = evaluate_line(line, line_no) } IRB.conf[:MEASURE_CALLBACKS].inject(last_proc) { |chain, item| _name, callback, arg = item proc { - callback.(@context, line, line_no, arg, exception: exc) do + callback.(@context, line, line_no, arg) do chain.call end } }.call @context.set_last_value(result) else - evaluate_line(line, line_no, exception: exc) + evaluate_line(line, line_no) end if @context.echo? if is_assignment @@ -589,22 +587,17 @@ def eval_input output_value end end - rescue Interrupt => exc rescue SystemExit, SignalException raise - rescue Exception => exc - else - exc = nil - next + rescue Interrupt, Exception => exc + handle_exception(exc) + @context.workspace.local_variable_set(:_, exc) end - handle_exception(exc) - @context.workspace.local_variable_set(:_, exc) - exc = nil end end end - def evaluate_line(line, line_no, exception: nil) + def evaluate_line(line, line_no) # Transform a non-identifier alias (@, $) or keywords (next, break) command, args = line.split(/\s/, 2) if original = @context.command_aliases[command.to_sym] @@ -618,7 +611,7 @@ def evaluate_line(line, line_no, exception: nil) line = "#{command} #{command_class.transform_args(args)}" end - @context.evaluate(line, line_no, exception: exception) + @context.evaluate(line, line_no) end def convert_invalid_byte_sequence(str, enc) diff --git a/lib/irb/context.rb b/lib/irb/context.rb index 22059d74d..58964aa83 100644 --- a/lib/irb/context.rb +++ b/lib/irb/context.rb @@ -473,15 +473,8 @@ def inspect_mode=(opt) @inspect_mode end - def evaluate(line, line_no, exception: nil) # :nodoc: + def evaluate(line, line_no) # :nodoc: @line_no = line_no - - if exception - line_no -= 1 - line = "begin ::Kernel.raise _; rescue _.class\n#{line}\n""end" - @workspace.local_variable_set(:_, exception) - end - set_last_value(@workspace.evaluate(line, irb_path, line_no)) end diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb index 5efbf045f..6ce0cb122 100644 --- a/test/irb/test_context.rb +++ b/test/irb/test_context.rb @@ -37,20 +37,6 @@ def test_last_value assert_same(obj, @context.evaluate('_', 1)) end - def test_evaluate_with_exception - assert_nil(@context.evaluate("$!", 1)) - e = assert_raise_with_message(RuntimeError, 'foo') { - @context.evaluate("raise 'foo'", 1) - } - assert_equal('foo', e.message) - assert_same(e, @context.evaluate('$!', 1, exception: e)) - e = assert_raise(SyntaxError) { - @context.evaluate("1,2,3", 1, exception: e) - } - assert_match(/\A\(irb\):1:/, e.message) - assert_not_match(/rescue _\.class/, e.message) - end - def test_evaluate_with_encoding_error_without_lineno assert_raise_with_message(EncodingError, /invalid symbol/) { @context.evaluate(%q[:"\xAE"], 1)