Home | History | Annotate | Download | only in test
      1 #!/usr/bin/ruby
      2 
      3 unless defined? Call
      4   
      5 Call = Struct.new( :file, :line, :method )
      6 class Call
      7   
      8   def self.parse( call_string )
      9     parts = call_string.split( ':', 3 )
     10     file = parts.shift
     11     line = parts.shift.to_i
     12     if parts.empty?
     13         return Call.new( file, line )
     14     else
     15         mstring = parts.shift
     16         match = mstring.match( /`(.+)'/ )
     17         method = match ? match[ 1 ] : nil
     18         return Call.new( file, line, method )
     19     end
     20   end
     21   
     22   def self.convert_backtrace( trace )
     23     trace.map { |c| parse c }
     24   end
     25   
     26   def irb?
     27     self.file == '(irb)'
     28   end
     29   
     30   def e_switch?
     31     self.file == '-e'
     32   end
     33   
     34   def to_s
     35     string = '%s:%i' % [ file, line ]
     36     method and string << ":in `%s'" % method
     37     return( string )
     38   end
     39   
     40   def inspect
     41     to_s.inspect
     42   end
     43 end
     44 
     45 module Kernel
     46   def call_stack( depth = 1 )
     47     Call.convert_backtrace( caller( depth + 1 ) )
     48   end
     49 end
     50 
     51 class Exception
     52   def backtrace!
     53     Call.convert_backtrace( backtrace )
     54   end
     55 end
     56 
     57 end # unless defined? Call
     58