lib/core/facets/kernel/callstack.rb in facets-2.9.3 vs lib/core/facets/kernel/callstack.rb in facets-3.0.0
- old
+ new
@@ -1,55 +1,110 @@
-require 'facets/kernel/call_stack'
+module Kernel
+
+ alias_method :pp_callstack, :caller
+ alias_method :pp_call_stack, :caller
+
+ # Parse a caller string and break it into its components,
+ # returning an array composed of:
+ #
+ # * file (String)
+ # * lineno (Integer)
+ # * method (Symbol)
+ #
+ # For example, from irb
+ #
+ # callstack(1)
+ #
+ # _produces_ ...
+ #
+ # [["(irb)", 2, :irb_binding],
+ # ["/usr/lib/ruby/1.8/irb/workspace.rb", 52, :irb_binding],
+ # ["/usr/lib/ruby/1.8/irb/workspace.rb", 52, nil]]
+ #
+ # Note: If the user decides to redefine caller() to output data
+ # in a different format, _prior_ to requiring this, then the
+ # results will be indeterminate.
+ #
+ # CREDIT: Trans
+
+ def callstack(level = 1)
+ call_str_array = pp_callstack(level)
+ stack = []
+ call_str_array.each{ |call_str|
+ file, lineno, method = call_str.split(':')
+ if method =~ /in `(.*)'/ then
+ method = $1.intern()
+ end
+ stack << [file, lineno.to_i, method]
+ }
+ stack
+ end
+
+ alias_method :call_stack, :callstack
+
+end
+
+
+class Binding
+
+ # Returns the call stack, in array format.
+ def callstack(level=1)
+ eval( "callstack( #{level} )" )
+ end
+
+ alias_method :call_stack, :callstack
+end
+