58 lines
1016 B
Ruby
58 lines
1016 B
Ruby
#!/usr/bin/ruby
|
|
|
|
unless defined? Call
|
|
|
|
Call = Struct.new( :file, :line, :method )
|
|
class Call
|
|
|
|
def self.parse( call_string )
|
|
parts = call_string.split( ':', 3 )
|
|
file = parts.shift
|
|
line = parts.shift.to_i
|
|
if parts.empty?
|
|
return Call.new( file, line )
|
|
else
|
|
mstring = parts.shift
|
|
match = mstring.match( /`(.+)'/ )
|
|
method = match ? match[ 1 ] : nil
|
|
return Call.new( file, line, method )
|
|
end
|
|
end
|
|
|
|
def self.convert_backtrace( trace )
|
|
trace.map { |c| parse c }
|
|
end
|
|
|
|
def irb?
|
|
self.file == '(irb)'
|
|
end
|
|
|
|
def e_switch?
|
|
self.file == '-e'
|
|
end
|
|
|
|
def to_s
|
|
string = '%s:%i' % [ file, line ]
|
|
method and string << ":in `%s'" % method
|
|
return( string )
|
|
end
|
|
|
|
def inspect
|
|
to_s.inspect
|
|
end
|
|
end
|
|
|
|
module Kernel
|
|
def call_stack( depth = 1 )
|
|
Call.convert_backtrace( caller( depth + 1 ) )
|
|
end
|
|
end
|
|
|
|
class Exception
|
|
def backtrace!
|
|
Call.convert_backtrace( backtrace )
|
|
end
|
|
end
|
|
|
|
end # unless defined? Call
|