diff options
-rw-r--r-- | debug.c | 20 | ||||
-rw-r--r-- | ruby.c | 4 |
2 files changed, 18 insertions, 6 deletions
@@ -121,8 +121,8 @@ UINT ruby_w32_codepage[2]; #endif extern int ruby_rgengc_debug; -static void -set_debug_option(const char *str, int len, void *arg) +int +ruby_env_debug_option(const char *str, int len, void *arg) { int ov; size_t retlen; @@ -131,7 +131,7 @@ set_debug_option(const char *str, int len, void *arg) if (len == sizeof(name) - 1 && \ strncmp(str, (name), len) == 0) { \ (var) = (val); \ - return; \ + return 1; \ } \ } while (0) #define NAME_MATCH_VALUE(name) \ @@ -168,7 +168,7 @@ set_debug_option(const char *str, int len, void *arg) if (NAME_MATCH_VALUE("rgengc")) { if (!len) ruby_rgengc_debug = 1; else SET_UINT_LIST("rgengc", &ruby_rgengc_debug, 1); - return; + return 1; } #if defined _WIN32 # if RUBY_MSVCRT_VERSION >= 80 @@ -179,10 +179,18 @@ set_debug_option(const char *str, int len, void *arg) if (NAME_MATCH_VALUE("codepage")) { if (!len) fprintf(stderr, "missing codepage argument"); else SET_UINT_LIST("codepage", ruby_w32_codepage, numberof(ruby_w32_codepage)); - return; + return 1; } #endif - fprintf(stderr, "unexpected debug option: %.*s\n", len, str); + return 0; +} + +static void +set_debug_option(const char *str, int len, void *arg) +{ + if (!ruby_env_debug_option(str, len, arg)) { + fprintf(stderr, "unexpected debug option: %.*s\n", len, str); + } } void @@ -856,12 +856,16 @@ disable_option(const char *str, int len, void *arg) feature_option(str, len, arg, 0U); } +RUBY_EXTERN const int ruby_patchlevel; +int ruby_env_debug_option(const char *str, int len, void *arg); + static void debug_option(const char *str, int len, void *arg) { static const char list[] = EACH_DEBUG_FEATURES(LITERAL_NAME_ELEMENT, ", "); #define SET_WHEN_DEBUG(bit) SET_WHEN(#bit, DEBUG_BIT(bit), str, len) EACH_DEBUG_FEATURES(SET_WHEN_DEBUG, ;); + if (ruby_patchlevel < 0 && ruby_env_debug_option(str, len, 0)) return; rb_warn("unknown argument for --debug: `%.*s'", len, str); rb_warn("debug features are [%.*s].", (int)strlen(list), list); } |