summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-04-13 18:06:35 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-04-13 18:06:35 +0000
commitfb68dfc40ea286ac3a02269574fab9d1e6970b8e (patch)
tree9849e6db66e8bcd1b154d456610bad4e83a6b07e /lib
parent081df640833fb4871048bcecffe61f110facd352 (diff)
irb.rb: hoist out handle_exception
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/irb.rb70
1 files changed, 37 insertions, 33 deletions
diff --git a/lib/irb.rb b/lib/irb.rb
index d650e9c497..30874cd58c 100644
--- a/lib/irb.rb
+++ b/lib/irb.rb
@@ -497,43 +497,47 @@ module IRB
rescue Exception => exc
end
if exc
- if exc.backtrace && exc.backtrace[0] =~ /irb(2)?(\/.*|-.*|\.rb)?:/ && exc.class.to_s !~ /^IRB/ &&
- !(SyntaxError === exc)
- irb_bug = true
- else
- irb_bug = false
- end
+ handle_exception(exc)
+ end
+ end
+ end
+ end
- messages = []
- lasts = []
- levels = 0
- if exc.backtrace
- count = 0
- exc.backtrace.each do |m|
- m = @context.workspace.filter_backtrace(m) or next unless irb_bug
- m = sprintf("%9d: from %s", (count += 1), m)
- if messages.size < @context.back_trace_limit
- messages.push(m)
- elsif lasts.size < @context.back_trace_limit
- lasts.push(m).shift
- levels += 1
- end
- end
- end
- attr = STDOUT.tty? ? ATTR_TTY : ATTR_PLAIN
- print "#{attr[1]}Traceback#{attr[]} (most recent call last):\n"
- unless lasts.empty?
- puts lasts.reverse
- printf "... %d levels...\n", levels if levels > 0
- end
- puts messages.reverse
- messages = exc.to_s.split(/\n/)
- print "#{attr[1]}#{exc.class} (#{attr[4]}#{messages.shift}#{attr[0, 1]})#{attr[]}\n"
- puts messages.map {|s| "#{attr[1]}#{s}#{attr[]}\n"}
- print "Maybe IRB bug!\n" if irb_bug
+ def handle_exception(exc)
+ if exc.backtrace && exc.backtrace[0] =~ /irb(2)?(\/.*|-.*|\.rb)?:/ && exc.class.to_s !~ /^IRB/ &&
+ !(SyntaxError === exc)
+ irb_bug = true
+ else
+ irb_bug = false
+ end
+
+ messages = []
+ lasts = []
+ levels = 0
+ if exc.backtrace
+ count = 0
+ exc.backtrace.each do |m|
+ m = @context.workspace.filter_backtrace(m) or next unless irb_bug
+ m = sprintf("%9d: from %s", (count += 1), m)
+ if messages.size < @context.back_trace_limit
+ messages.push(m)
+ elsif lasts.size < @context.back_trace_limit
+ lasts.push(m).shift
+ levels += 1
end
end
end
+ attr = STDOUT.tty? ? ATTR_TTY : ATTR_PLAIN
+ print "#{attr[1]}Traceback#{attr[]} (most recent call last):\n"
+ unless lasts.empty?
+ puts lasts.reverse
+ printf "... %d levels...\n", levels if levels > 0
+ end
+ puts messages.reverse
+ messages = exc.to_s.split(/\n/)
+ print "#{attr[1]}#{exc.class} (#{attr[4]}#{messages.shift}#{attr[0, 1]})#{attr[]}\n"
+ puts messages.map {|s| "#{attr[1]}#{s}#{attr[]}\n"}
+ print "Maybe IRB bug!\n" if irb_bug
end
# Evaluates the given block using the given +path+ as the Context#irb_path