blob: fa65fa7e87ccb4310df0fd4bf0e69cac15c50423 [file] [log] [blame]
#!/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