mruby-bin-debugger: extract raise_debugger_exception() helper

Both dbgcmd_run() and dbgcmd_quit() defined an exception class
and raised it with identical code. Add a shared static inline
helper in mrdb.h.

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Yukihiro "Matz" Matsumoto
2026-02-24 09:02:11 +09:00
parent 811741eb8e
commit eedc95460c
3 changed files with 10 additions and 6 deletions
@@ -501,9 +501,7 @@ dbgcmd_quit(mrb_state *mrb, mrdb_state *mrdb)
}
if (mrdb->dbg->xm == DBG_QUIT) {
struct RClass *exc;
exc = mrb_define_class(mrb, "DebuggerExit", E_EXCEPTION);
mrb_raise(mrb, exc, "Exit mrdb");
raise_debugger_exception(mrb, "DebuggerExit", "Exit mrdb");
}
return DBGST_PROMPT;
}
@@ -17,10 +17,8 @@ dbgcmd_run(mrb_state *mrb, mrdb_state *mrdb)
else {
dbg->xm = DBG_QUIT;
if (dbg->xphase == DBG_PHASE_RUNNING){
struct RClass *exc;
puts("Start it from the beginning");
exc = mrb_define_class(mrb, "DebuggerRestart", E_EXCEPTION);
mrb_raise(mrb, exc, "Restart mrdb");
raise_debugger_exception(mrb, "DebuggerRestart", "Restart mrdb");
}
}
@@ -7,6 +7,7 @@
#define MRDB_H
#include <mruby.h>
#include <mruby/class.h>
#include "mrdbconf.h"
@@ -136,6 +137,13 @@ typedef struct mrdb_state {
typedef dbgcmd_state (*debug_command_func)(mrb_state*, mrdb_state*);
static inline mrb_noreturn void
raise_debugger_exception(mrb_state *mrb, const char *name, const char *msg)
{
struct RClass *exc = mrb_define_class(mrb, name, E_EXCEPTION);
mrb_raise(mrb, exc, msg);
}
/* cmdrun.c */
dbgcmd_state dbgcmd_run(mrb_state*, mrdb_state*);
dbgcmd_state dbgcmd_continue(mrb_state*, mrdb_state*);