From 4f54d4710e1edfbcb8b0d7d7feea1bd8c519229f Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 26 May 2012 04:49:23 +0000 Subject: * vm.c (RubyVM::FrameInfo): add a class to access each frame information. You don't need to parse strings from caller(). FrameInfo has the following methods: FrameInfo#name: method name, class name, etc with decorations. FrameInfo#basename: name without decorations. FrameInfo#line_no: line number. FrameInfo#filename: file name. FrameInfo#filepath: full filepath. FrameInfo#iseq: iseq if it is iseq frame (defined by ruby script) FrameInfo#to_s: return caller() method style string. RubyVM::FrameInfoFrameInfo.caller(n, lev) returns array of FrameInfo objects. The name "RubyVM::FrameInfoFrameInfo.caller" is long and ambiguous (same as caller() method), we need to change the name before Ruby 2.0 release. Good names or comments are welcome. * test/ruby/test_backtrace.rb: add a test for above change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_backtrace.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'test/ruby/test_backtrace.rb') diff --git a/test/ruby/test_backtrace.rb b/test/ruby/test_backtrace.rb index c35b95c9e1..5eae64f325 100644 --- a/test/ruby/test_backtrace.rb +++ b/test/ruby/test_backtrace.rb @@ -84,4 +84,14 @@ class TestBacktrace < Test::Unit::TestCase } rec[m] end + + def test_caller_frame_info + fis = RubyVM::FrameInfo.caller(0); cs = caller(0) + assert_equal(cs.size, fis.size) + fis.zip(cs).each{|fi, s| + assert_match(/#{fi.name}/, s) + assert_match(/#{fi.filename}/, s) + assert_match(/#{fi.line_no}/, s) + } + end end -- cgit v1.2.3