ruby.c: debug options in command line

* ruby.c (debug_option): parse options in --debug command line
  option same as RUBY_DEBUG env.  available only in the trunk.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59129 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-06-21 02:44:23 +00:00
Родитель 9cacc53d4a
Коммит 793f5d8fe8
2 изменённых файлов: 18 добавлений и 6 удалений

20
debug.c
Просмотреть файл

@ -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

4
ruby.c
Просмотреть файл

@ -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);
}