From: sylvain.joyeux@...4x.org Date: 2017-05-11T18:36:01+00:00 Subject: [ruby-core:81103] [Ruby trunk Bug#13557] there's no way to pass backtrace locations as a massaged backtrace Issue #13557 has been updated by sylvain.joyeux (Sylvain Joyeux). Did a mistake. The code example uses `caller_locations` (and therefore causes the `TypeError` exception) while I meant it to use `caller` and therefore cause `e.backtrace_locations` to be nil ---------------------------------------- Bug #13557: there's no way to pass backtrace locations as a massaged backtrace https://bugs.ruby-lang.org/issues/13557#change-64753 * Author: sylvain.joyeux (Sylvain Joyeux) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-linux], ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- 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: ~~~ 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 `set_backtrace': backtrace must be Array of String (TypeError)` -- https://bugs.ruby-lang.org/ Unsubscribe: