Round trip exception backtraces

This commit allows exception backtraces to round trip
This commit is contained in:
Aaron Patterson 2019-01-09 13:34:51 -08:00 коммит произвёл Hiroshi SHIBATA
Родитель f770a5be66
Коммит a53ab897c3
3 изменённых файлов: 19 добавлений и 0 удалений

Просмотреть файл

@ -252,6 +252,8 @@ module Psych
e = build_exception((resolve_class($1) || class_loader.exception),
h.delete('message'))
e.set_backtrace h.delete('backtrace') if h.key? 'backtrace'
init_with(e, h, o)
when '!set', 'tag:yaml.org,2002:set'

Просмотреть файл

@ -472,6 +472,9 @@ module Psych
accept msg
end
@emitter.scalar 'backtrace', nil, nil, true, false, Nodes::Scalar::ANY
accept o.backtrace
dump_ivars o
@emitter.end_mapping

Просмотреть файл

@ -23,6 +23,20 @@ module Psych
$VERBOSE = @orig_verbose
end
def make_ex msg = 'oh no!'
begin
raise msg
rescue ::Exception => e
e
end
end
def test_backtrace
err = make_ex
new_err = Psych.load(Psych.dump(err))
assert_equal err.backtrace, new_err.backtrace
end
def test_naming_exception
err = String.xxx rescue $!
new_err = Psych.load(Psych.dump(err))