summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTomoyuki Sahara <[email protected]>2012-11-01 14:54:04 +0900
committerTomoyuki Sahara <[email protected]>2012-11-02 10:33:23 +0900
commit80ed166e9f3f293f166086dc70e766272c342950 (patch)
treea6ac0d0c0e7f2bfc225be2a25d545a4836dc713a
parent075aa3eeaa9ee798ebcd8781f04a18fbbab7b2fd (diff)
downloadmruby-80ed166e9f3f293f166086dc70e766272c342950.tar.gz
mruby-80ed166e9f3f293f166086dc70e766272c342950.zip
show all callinfo's.
-rw-r--r--src/error.c1
-rw-r--r--src/vm.c3
-rw-r--r--tools/mruby/mruby.c6
3 files changed, 4 insertions, 6 deletions
diff --git a/src/error.c b/src/error.c
index 858c70820..430728db0 100644
--- a/src/error.c
+++ b/src/error.c
@@ -189,6 +189,7 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
mrb_callinfo *ci = mrb->ci;
mrb_code *pc = ci->pc;
+ mrb_obj_iv_set(mrb, exc, mrb_intern(mrb, "ciidx"), mrb_fixnum_value(ci - mrb->cibase));
ci--;
while (ci >= mrb->cibase) {
if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc)) {
diff --git a/src/vm.c b/src/vm.c
index fe359be47..953863a0b 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -169,9 +169,6 @@ cipush(mrb_state *mrb)
mrb->ci->eidx = eidx;
mrb->ci->ridx = ridx;
mrb->ci->env = 0;
- if (mrb->ci + 1 != mrb->ciend) {
- mrb->ci[1].mid = 0;
- }
return mrb->ci;
}
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c
index 2037ee2a8..5a97adc8a 100644
--- a/tools/mruby/mruby.c
+++ b/tools/mruby/mruby.c
@@ -166,14 +166,14 @@ static void
showcallinfo(mrb_state *mrb)
{
mrb_callinfo *ci;
+ mrb_int ciidx;
const char *filename, *sep;
int i;
printf("trace:\n");
- for (i = 1; &mrb->cibase[i] < mrb->ciend; i++) {
+ ciidx = mrb_fixnum(mrb_obj_iv_get(mrb, mrb->exc, mrb_intern(mrb, "ciidx")));
+ for (i = 1; i <= ciidx; i++) {
ci = &mrb->cibase[i];
- if (ci->mid == 0)
- break;
if (MRB_PROC_CFUNC_P(ci->proc))
filename = "(cfunc)";