def self.error_print(e)
warn_print = ""
backtrace = e.backtrace
backtrace = [ backtrace ] if backtrace.is_a?(String)
warn_print << backtrace[0]
if e.is_a?(RuntimeError) && e.message.empty?
warn_print << ": unhandled exception\n"
else
if e.message.empty?
warn_print << ": #{ e.class.name }\n"
else
split_message = e.message.split("\n")
warn_print << ": "
if split_message.size == 1
warn_print << "#{ e.message } (#{ e.class.name })\n"
else
warn_print << split_message[0]
warn_print << " (#{ e.class.name })\n"
warn_print << split_message[1..-1].join("\n").chomp << "\n"
end
end
end
len = backtrace.size
skip = e.is_a?(SystemStackError)
trace_head = 8
trace_tail = 5
trace_max = (trace_head + trace_tail + 5)
i = 1
while i < len
warn_print << "\tfrom %s\n" % e.backtrace[i]
if skip && i == trace_head && len > trace_max
warn_print << "\t ... %d levels...\n" % (len - trace_head - trace_tail)
i = len - trace_tail
end
i += 1
end
warn_print
end