From e5bacc03f20c3be5006f0283200b48a15ff699b7 Mon Sep 17 00:00:00 2001 From: mimaki Date: Tue, 18 Nov 2014 23:33:32 +0900 Subject: Add mruby debugger (mrdb) --- mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c | 58 ++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100755 mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c (limited to 'mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c') diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c new file mode 100755 index 000000000..16b811edb --- /dev/null +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c @@ -0,0 +1,58 @@ +/* +** cmdprint.c - mruby debugger print command functions +** +*/ + +#include +#include "mrdb.h" +#include "mruby/value.h" +#include "mruby/class.h" +#include "mruby/compile.h" +#include "mruby/error.h" +#include "mruby/numeric.h" +#include "mruby/string.h" +#include "apiprint.h" + +dbgcmd_state +dbgcmd_print(mrb_state *mrb, mrdb_state *mrdb) +{ + mrb_value expr; + mrb_value result; + mrb_value s; + uint8_t wcnt; + int ai; + + if (mrdb->wcnt <= 1) { + puts("Parameter not specified."); + return DBGST_PROMPT; + } + + ai = mrb_gc_arena_save(mrb); + + /* eval expr */ + expr = mrb_str_new_cstr(mrb, NULL); + for (wcnt=1; wcntwcnt; wcnt++) { + expr = mrb_str_cat_cstr(mrb, expr, " "); + expr = mrb_str_cat_cstr(mrb, expr, mrdb->words[wcnt]); + } + + result = mrb_debug_eval(mrb, mrdb->dbg, RSTRING_PTR(expr), RSTRING_LEN(expr), NULL); + + /* $print_no = result */ + s = mrb_str_cat_cstr(mrb, result, "\0"); + printf("$%lu = %s\n", (unsigned long)mrdb->print_no++, RSTRING_PTR(s)); + + if (mrdb->print_no == 0) { + mrdb->print_no = 1; + } + + mrb_gc_arena_restore(mrb, ai); + + return DBGST_PROMPT; +} + +dbgcmd_state +dbgcmd_eval(mrb_state *mrb, mrdb_state *mrdb) +{ + return dbgcmd_print(mrb, mrdb); +} -- cgit v1.2.3