mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* vm.c (backtrace_object): remove lev and n parameter. backtrace_object always returns all of backtrace information. * vm.c (rb_backtrace_to_str_ary): fix to use backtrace_object(). This change improve performance of caller(lev, n). * benchmark/bm_vm3_backtrace.rb: added to check above improvement. FYI: measurement on my laptop, 1.9.3p229 needs 5.125 sec, and current trunk only needs 0.299sec. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35800 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			22 lines
		
	
	
	
		
			252 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
	
		
			252 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# get last backtrace
 | 
						|
 | 
						|
begin
 | 
						|
  caller(0, 0)
 | 
						|
rescue ArgumentError
 | 
						|
  alias caller_orig caller
 | 
						|
  def caller lev, n
 | 
						|
    caller_orig(lev)[0..n]
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
def rec n
 | 
						|
  if n < 0
 | 
						|
    100_000.times{
 | 
						|
      caller(0, 1)
 | 
						|
    }
 | 
						|
  else
 | 
						|
    rec(n-1)
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
rec 50
 | 
						|
 |