From: eregontp@... Date: 2019-03-23T21:43:16+00:00 Subject: [ruby-core:91960] [Ruby trunk Bug#15558] Should Exception#exception copy the backtrace? Issue #15558 has been updated by Eregon (Benoit Daloze). BTW, MRuby 2.0.0 also copies the backtrace (because it implements Exception#exception as clone + setting the message): ``` $ mruby -e 'begin raise "foo"; rescue => e; c=e.exception "bar"; p c.backtrace; end' ["-e:1"] ``` MRI also clones (with `rb_obj_clone`), but `exc_init` resets the backtrace to `nil`. So should `exc_exception()` just call `rb_ivar_set(exc, id_mesg, argv[0]);` instead of `exc_initialize` (which kind of initializes the object twice)? ---------------------------------------- Bug #15558: Should Exception#exception copy the backtrace? https://bugs.ruby-lang.org/issues/15558#change-77294 * Author: Eregon (Benoit Daloze) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux] * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- Currently it does not on MRI: ``` ruby -e 'begin raise "foo"; rescue => e; c=e.exception "bar"; p c.backtrace; end' nil ``` But it does on JRuby 9.2.5.0 and TruffleRuby 1.0.0-rc11: ``` truffleruby -e 'begin raise "foo"; rescue => e; c=e.exception "bar"; p e.backtrace; end' ["-e:1:in `
'"] ``` This means in some cases, code needs about this difference such as in https://github.com/asciidoctor/asciidoctor/blob/41da20a47a8da96966ef3ec1c2f509e07e7920e3/lib/asciidoctor.rb#L1322-L1338 More context in: https://github.com/oracle/truffleruby/issues/1542#issuecomment-456850066 -- https://bugs.ruby-lang.org/ Unsubscribe: