Project

General

Profile

Feature #13557

Updated by nobu (Nobuyoshi Nakada) 9 months ago

When re-raising exceptions, it is sometimes useful to "massage" the backtrace (especially in DSLs). 

 There is currently no way to do it using only backtrace locations. This causes the new exception to have #backtrace_locations return nil, and thus makes backtrace_locations unreliable as a whole. 

 Example: 


 ~~~ruby ~~~ 
 def test 
     raise ArgumentError, "", caller_locations 
 end 

 begin 
     test 
 rescue ArgumentError => e 
     p e.backtrace_locations 
 end 
 ~~~ 

 attempting to pass `caller_location` to `Kernel#raise` in the `test` method fails with ``bla.rb:2:in `bla.rb:2:in `set_backtrace': backtrace must be Array of String (TypeError)`` (TypeError)`

Back