revert 38e9ce21 and API changed; mrb_get_backtrace() -> renamed to...

revert 38e9ce21 and API changed; mrb_get_backtrace() -> renamed to mrb_exc_backtrace since this is a backtrace method implementation of Exception; mrb_get_backtrace_at() -> removed; mrb_get_backtrace() -> added to get backtrace in array (like caller)
parent 0c1c4416
......@@ -14,7 +14,7 @@ mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
void mrb_exc_print(mrb_state *mrb, struct RObject *exc);
void mrb_longjmp(mrb_state *mrb);
void mrb_print_backtrace(mrb_state *mrb);
mrb_value mrb_get_backtrace(mrb_state *mrb, mrb_value exc);
void mrb_get_backtrace_at(mrb_state *mrb, mrb_callinfo *ci, mrb_code *pc0);
mrb_value mrb_exc_backtrace(mrb_state *mrb, mrb_value exc);
mrb_value mrb_get_backtrace(mrb_state *mrb);
#endif /* MRUBY_ERROR_H */
......@@ -12,6 +12,7 @@
#include "mruby/string.h"
#include "mruby/class.h"
#include "mruby/debug.h"
#include "mruby/error.h"
typedef void (*output_stream_func)(mrb_state*, void*, int, const char*, ...);
......@@ -151,7 +152,7 @@ mrb_print_backtrace(mrb_state *mrb)
}
mrb_value
mrb_get_backtrace(mrb_state *mrb, mrb_value self)
mrb_exc_backtrace(mrb_state *mrb, mrb_value self)
{
mrb_value ary;
......@@ -162,11 +163,14 @@ mrb_get_backtrace(mrb_state *mrb, mrb_value self)
}
mrb_value
mrb_get_backtrace_at(mrb_state *mrb, mrb_callinfo *ci, mrb_code *pc)
mrb_get_backtrace(mrb_state *mrb)
{
mrb_value ary;
mrb_int ciidx = ci - mrb->c->cibase;
mrb_callinfo *ci = mrb->c->ci;
mrb_code *pc = ci->pc;
mrb_int ciidx = ci - mrb->c->cibase - 1;
if (ciidx < 0) ciidx = 0;
ary = mrb_ary_new(mrb);
output_backtrace(mrb, ciidx, pc, get_backtrace_i, (void*)mrb_ary_ptr(ary));
......
......@@ -431,8 +431,6 @@ mrb_sys_fail(mrb_state *mrb, const char *mesg)
}
}
mrb_value mrb_get_backtrace(mrb_state*, mrb_value);
void
mrb_init_exception(mrb_state *mrb)
{
......@@ -446,7 +444,7 @@ mrb_init_exception(mrb_state *mrb)
mrb_define_method(mrb, e, "to_s", exc_to_s, MRB_ARGS_NONE());
mrb_define_method(mrb, e, "message", exc_message, MRB_ARGS_NONE());
mrb_define_method(mrb, e, "inspect", exc_inspect, MRB_ARGS_NONE());
mrb_define_method(mrb, e, "backtrace", mrb_get_backtrace, MRB_ARGS_NONE());
mrb_define_method(mrb, e, "backtrace", mrb_exc_backtrace, MRB_ARGS_NONE());
mrb->eStandardError_class = mrb_define_class(mrb, "StandardError", mrb->eException_class); /* 15.2.23 */
mrb_define_class(mrb, "RuntimeError", mrb->eStandardError_class); /* 15.2.28 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment