From 40b0cb98f78e86f408242d0cad148f7d24b5fb61 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 16 Nov 2025 06:53:02 +0900 Subject: [PATCH] mruby.h: add MRB_OPEN_FAILURE() macro and refactor MRB_OPEN_SUCCESS() since all current uses check for failure (!MRB_OPEN_SUCCESS), add MRB_OPEN_FAILURE() as the primary macro for better readability. define MRB_OPEN_SUCCESS() in terms of MRB_OPEN_FAILURE() to avoid duplication and optimize the common case. update all usage sites to use the clearer MRB_OPEN_FAILURE() form. Co-authored-by: Claude --- include/mruby.h | 20 +++++++++++++++----- mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | 2 +- mrbgems/mruby-bin-mirb/tools/mirb/mirb.c | 2 +- mrbgems/mruby-bin-mruby/tools/mruby/mruby.c | 2 +- mrbgems/mruby-test/driver.c | 2 +- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index ee23688ff..a0fb07442 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1271,18 +1271,18 @@ MRB_API void mrb_close(mrb_state *mrb); MRB_API void mrb_method_cache_clear(mrb_state *mrb); /** - * Check if mrb_open() succeeded + * Check if mrb_open() failed * * @param mrb * Pointer returned from mrb_open() or mrb_open_core(). * @return - * Non-zero if initialization succeeded, 0 if failed. + * Non-zero if initialization failed, 0 if succeeded. * @note * mrb_open() may return non-NULL even on failure (with mrb->exc set). - * Use this macro to check for success: + * Use this macro to check for failure: * @code * mrb_state *mrb = mrb_open(); - * if (!MRB_OPEN_SUCCESS(mrb)) { + * if (MRB_OPEN_FAILURE(mrb)) { * if (mrb) { * // Inspect mrb->exc for error details * mrb_close(mrb); @@ -1291,7 +1291,17 @@ MRB_API void mrb_method_cache_clear(mrb_state *mrb); * } * @endcode */ -#define MRB_OPEN_SUCCESS(mrb) ((mrb) && !(mrb)->exc) +#define MRB_OPEN_FAILURE(mrb) (!(mrb) || (mrb)->exc) + +/** + * Check if mrb_open() succeeded + * + * @param mrb + * Pointer returned from mrb_open() or mrb_open_core(). + * @return + * Non-zero if initialization succeeded, 0 if failed. + */ +#define MRB_OPEN_SUCCESS(mrb) (!MRB_OPEN_FAILURE(mrb)) /** * The memory allocation function. You can redefine this function for your own allocator. diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c index c2f736871..b3f1a1db8 100644 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c @@ -673,7 +673,7 @@ main(int argc, char **argv) l_restart: - if (!MRB_OPEN_SUCCESS(mrb)) { + if (MRB_OPEN_FAILURE(mrb)) { mrb_print_error(mrb); /* handles NULL */ mrb_close(mrb); /* handles NULL */ return EXIT_FAILURE; diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index c26dcfdd3..35901816c 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -475,7 +475,7 @@ main(int argc, char **argv) /* new interpreter instance */ mrb = mrb_open(); - if (!MRB_OPEN_SUCCESS(mrb)) { + if (MRB_OPEN_FAILURE(mrb)) { mrb_print_error(mrb); /* handles NULL */ mrb_close(mrb); /* handles NULL */ return EXIT_FAILURE; diff --git a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c index fc56900c3..b5201d1ea 100644 --- a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +++ b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c @@ -282,7 +282,7 @@ main(int argc, char **argv) mrb_value ARGV; mrb_value v; - if (!MRB_OPEN_SUCCESS(mrb)) { + if (MRB_OPEN_FAILURE(mrb)) { mrb_print_error(mrb); /* handles NULL */ mrb_close(mrb); /* handles NULL */ return EXIT_FAILURE; diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index 7caecd54e..fb7f10cf8 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -290,7 +290,7 @@ main(int argc, char **argv) /* new interpreter instance */ mrb = mrb_open(); - if (!MRB_OPEN_SUCCESS(mrb)) { + if (MRB_OPEN_FAILURE(mrb)) { mrb_print_error(mrb); /* handles NULL */ mrb_close(mrb); /* handles NULL */ return EXIT_FAILURE;