summaryrefslogtreecommitdiffhomepage
path: root/src/backtrace.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-02-27 04:34:30 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-02-27 04:34:30 +0900
commit5b8229715df0d676367ab9d5c38a658b043781b3 (patch)
tree551cbeea4e1e17e347d418551bd504557430d736 /src/backtrace.c
parent0c1c4416e7c96cf589dbeee2103fa9432dc17473 (diff)
downloadmruby-5b8229715df0d676367ab9d5c38a658b043781b3.tar.gz
mruby-5b8229715df0d676367ab9d5c38a658b043781b3.zip
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)
Diffstat (limited to 'src/backtrace.c')
-rw-r--r--src/backtrace.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backtrace.c b/src/backtrace.c
index a61d14e0c..6469fc069 100644
--- a/src/backtrace.c
+++ b/src/backtrace.c
@@ -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));