Exception: Exception
- Defined in:
- lib/dolzenko/error_print.rb
Overview
Formats the Exception so that it looks familiar, i.e. exactly like your interpreter does it.
Port of MRI native ‘error_print` function.
Direct Known Subclasses
Class Method Summary collapse
Class Method Details
.error_print(e = $ERROR_INFO) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/dolzenko/error_print.rb', line 8 def self.error_print(e = $ERROR_INFO) warn_print = "" backtrace = e.backtrace backtrace = [ backtrace ] if backtrace.is_a?(String) # 1.9 returns single String for SystemStackError warn_print << backtrace[0] if e.is_a?(RuntimeError) && e..empty? warn_print << ": unhandled exception\n" else if e..empty? warn_print << ": #{ e.class.name }\n" else = e..split("\n") warn_print << ": " if .size == 1 warn_print << "#{ e. } (#{ e.class.name })\n" else warn_print << [0] warn_print << " (#{ e.class.name })\n" warn_print << [1..-1].join("\n").chomp << "\n" end end end len = backtrace.size # int skip = eclass == rb_eSysStackError; skip = e.is_a?(SystemStackError) # #define TRACE_MAX (TRACE_HEAD+TRACE_TAIL+5) # #define TRACE_HEAD 8 # #define TRACE_TAIL 5 trace_head = 8 trace_tail = 5 trace_max = (trace_head + trace_tail + 5) # # for (i = 1; i < len; i++) { i = 1 while i < len # if (TYPE(ptr[i]) == T_STRING) { # warn_printf("\tfrom %s\n", RSTRING_PTR(ptr[i])); # } warn_print << "\tfrom %s\n" % e.backtrace[i] # if (skip && i == TRACE_HEAD && len > TRACE_MAX) { if skip && i == trace_head && len > trace_max # warn_printf("\t ... %ld levels...\n", # len - TRACE_HEAD - TRACE_TAIL); warn_print << "\t ... %d levels...\n" % (len - trace_head - trace_tail) # i = len - TRACE_TAIL; i = len - trace_tail # } end # } i += 1 end warn_print end |