diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-05-31 23:15:17 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-05-31 23:15:17 +0900 |
| commit | ff7df939ba88389cd7f1a2226b3e1d49822711b3 (patch) | |
| tree | f6878c55202a6f27d8e614b361a1592b4a2d8354 /src/backtrace.c | |
| parent | 2837de95fe41cc7dd378f9eeea5d0bd217c80323 (diff) | |
| download | mruby-ff7df939ba88389cd7f1a2226b3e1d49822711b3.tar.gz mruby-ff7df939ba88389cd7f1a2226b3e1d49822711b3.zip | |
Restore MRB_API function `mrb_exc_backtrace(mrb, exc)`; ref 9644ad5
Diffstat (limited to 'src/backtrace.c')
| -rw-r--r-- | src/backtrace.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/backtrace.c b/src/backtrace.c index ea88aca9f..dd00bc9d2 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -227,7 +227,23 @@ mrb_unpack_backtrace(mrb_state *mrb, mrb_value backtrace) return backtrace; } -mrb_value +MRB_API mrb_value +mrb_exc_backtrace(mrb_state *mrb, mrb_value exc) +{ + mrb_sym attr_name; + mrb_value backtrace; + + attr_name = mrb_intern_lit(mrb, "backtrace"); + backtrace = mrb_iv_get(mrb, exc, attr_name); + if (mrb_nil_p(backtrace) || mrb_array_p(backtrace)) { + return backtrace; + } + backtrace = mrb_unpack_backtrace(mrb, backtrace); + mrb_iv_set(mrb, exc, attr_name, backtrace); + return backtrace; +} + +MRB_API mrb_value mrb_get_backtrace(mrb_state *mrb) { return mrb_unpack_backtrace(mrb, packed_backtrace(mrb)); |
