aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNobuhiro IMAI <nov@yo.rim.or.jp>2021-01-15 22:00:38 +0900
committeraycabta <aycabta@gmail.com>2021-01-18 02:12:53 +0900
commitd290a02bd7035eb186eb5c275af4e1ddc20ad47f (patch)
treeb22ffc421fcc58973e9ad7670f3f1f0c613434aa
parent3f0b4665df786990799c4cbac4de3a3cafb5e6bc (diff)
downloadruby-d290a02bd7035eb186eb5c275af4e1ddc20ad47f.tar.gz
[ruby/irb] handle repeated exception separately
https://github.com/ruby/irb/commit/fcf6b34bc5
-rw-r--r--lib/irb.rb2
-rw-r--r--test/irb/test_context.rb18
2 files changed, 20 insertions, 0 deletions
diff --git a/lib/irb.rb b/lib/irb.rb
index cf53130..3f7f169 100644
--- a/lib/irb.rb
+++ b/lib/irb.rb
@@ -574,6 +574,8 @@ module IRB
next
end
handle_exception(exc)
+ @context.workspace.local_variable_set(:_, exc)
+ exc = nil
end
end
end
diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb
index 4949502..a32b1fc 100644
--- a/test/irb/test_context.rb
+++ b/test/irb/test_context.rb
@@ -105,6 +105,24 @@ module TestIRB
$VERBOSE = verbose
end
+ def test_eval_input_raise2x
+ input = TestInputMethod.new([
+ "raise 'Foo'\n",
+ "raise 'Bar'\n",
+ "_\n",
+ ])
+ irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input)
+ out, err = capture_output do
+ irb.eval_input
+ end
+ assert_empty err
+ assert_pattern_list([
+ :*, /\(irb\):1:in `<main>': Foo \(RuntimeError\)\n/,
+ :*, /\(irb\):2:in `<main>': Bar \(RuntimeError\)\n/,
+ :*, /#<RuntimeError: Bar>\n/,
+ ], out)
+ end
+
def test_eval_object_without_inspect_method
verbose, $VERBOSE = $VERBOSE, nil
all_assertions do |all|