summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/irb/context.rb3
-rw-r--r--test/irb/test_context.rb5
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/irb/context.rb b/lib/irb/context.rb
index 571df2c21a..b7b2230856 100644
--- a/lib/irb/context.rb
+++ b/lib/irb/context.rb
@@ -397,7 +397,8 @@ module IRB
def evaluate(line, line_no, exception: nil) # :nodoc:
@line_no = line_no
if exception
- line = "begin ::Kernel.raise _; rescue _.class; #{line}; end"
+ line_no -= 1
+ line = "begin ::Kernel.raise _; rescue _.class\n#{line}\n""end"
@workspace.local_variable_set(:_, exception)
end
set_last_value(@workspace.evaluate(self, line, irb_path, line_no))
diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb
index 96e6fbfc61..8b245d105d 100644
--- a/test/irb/test_context.rb
+++ b/test/irb/test_context.rb
@@ -52,6 +52,11 @@ module TestIRB
}
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_eval_input