* ruby.c (enum feature_flag_bits, struct cmdline_options): turn
  negative logic disable bits into positive logic feature bits.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51921 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-09-23 14:43:45 +00:00
Родитель b885cec842
Коммит f9a9193ae0
1 изменённых файлов: 24 добавлений и 23 удалений

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

@ -59,12 +59,12 @@ char *getenv();
#define DEFAULT_RUBYGEMS_ENABLED "enabled" #define DEFAULT_RUBYGEMS_ENABLED "enabled"
#endif #endif
#define DISABLE_BIT(bit) (1U << disable_##bit) #define FEATURE_BIT(bit) (1U << feature_##bit)
enum disable_flag_bits { enum feature_flag_bits {
disable_gems, feature_gems,
disable_did_you_mean, feature_did_you_mean,
disable_rubyopt, feature_rubyopt,
disable_flag_count feature_flag_count
}; };
#define DUMP_BIT(bit) (1U << dump_##bit) #define DUMP_BIT(bit) (1U << dump_##bit)
@ -87,7 +87,7 @@ struct cmdline_options {
int do_loop, do_print; int do_loop, do_print;
int do_line, do_split; int do_line, do_split;
int do_search; int do_search;
unsigned int disable; unsigned int features;
int verbose; int verbose;
int safe_level; int safe_level;
unsigned int setids; unsigned int setids;
@ -116,8 +116,9 @@ cmdline_options_init(struct cmdline_options *opt)
opt->src.enc.index = src_encoding_index; opt->src.enc.index = src_encoding_index;
opt->ext.enc.index = -1; opt->ext.enc.index = -1;
opt->intern.enc.index = -1; opt->intern.enc.index = -1;
opt->features = ~0U;
#if DISABLE_RUBYGEMS #if DISABLE_RUBYGEMS
opt->disable |= DISABLE_BIT(gems); opt->features &= ~FEATURE_BIT(gems);
#endif #endif
return opt; return opt;
} }
@ -710,12 +711,12 @@ moreswitches(const char *s, struct cmdline_options *opt, int envopt)
static void static void
enable_option(const char *str, int len, void *arg) enable_option(const char *str, int len, void *arg)
{ {
#define UNSET_WHEN_DISABLE(bit) UNSET_WHEN(#bit, DISABLE_BIT(bit), str, len) #define SET_WHEN_ENABLE(bit) SET_WHEN(#bit, FEATURE_BIT(bit), str, len)
UNSET_WHEN_DISABLE(gems); SET_WHEN_ENABLE(gems);
UNSET_WHEN_DISABLE(did_you_mean); SET_WHEN_ENABLE(did_you_mean);
UNSET_WHEN_DISABLE(rubyopt); SET_WHEN_ENABLE(rubyopt);
if (NAME_MATCH_P("all", str, len)) { if (NAME_MATCH_P("all", str, len)) {
*(unsigned int *)arg = 0U; *(unsigned int *)arg = ~0U;
return; return;
} }
rb_warn("unknown argument for --enable: `%.*s'", len, str); rb_warn("unknown argument for --enable: `%.*s'", len, str);
@ -724,12 +725,12 @@ enable_option(const char *str, int len, void *arg)
static void static void
disable_option(const char *str, int len, void *arg) disable_option(const char *str, int len, void *arg)
{ {
#define SET_WHEN_DISABLE(bit) SET_WHEN(#bit, DISABLE_BIT(bit), str, len) #define UNSET_WHEN_DISABLE(bit) UNSET_WHEN(#bit, FEATURE_BIT(bit), str, len)
SET_WHEN_DISABLE(gems); UNSET_WHEN_DISABLE(gems);
SET_WHEN_DISABLE(did_you_mean); UNSET_WHEN_DISABLE(did_you_mean);
SET_WHEN_DISABLE(rubyopt); UNSET_WHEN_DISABLE(rubyopt);
if (NAME_MATCH_P("all", str, len)) { if (NAME_MATCH_P("all", str, len)) {
*(unsigned int *)arg = ~0U; *(unsigned int *)arg = 0U;
return; return;
} }
rb_warn("unknown argument for --disable: `%.*s'", len, str); rb_warn("unknown argument for --disable: `%.*s'", len, str);
@ -1065,10 +1066,10 @@ proc_options(long argc, char **argv, struct cmdline_options *opt, int envopt)
ruby_verbose = Qtrue; ruby_verbose = Qtrue;
} }
else if (is_option_with_arg("enable", Qtrue, Qtrue)) { else if (is_option_with_arg("enable", Qtrue, Qtrue)) {
ruby_each_words(s, enable_option, &opt->disable); ruby_each_words(s, enable_option, &opt->features);
} }
else if (is_option_with_arg("disable", Qtrue, Qtrue)) { else if (is_option_with_arg("disable", Qtrue, Qtrue)) {
ruby_each_words(s, disable_option, &opt->disable); ruby_each_words(s, disable_option, &opt->features);
} }
else if (is_option_with_arg("encoding", Qfalse, Qtrue)) { else if (is_option_with_arg("encoding", Qfalse, Qtrue)) {
char *p; char *p;
@ -1324,7 +1325,7 @@ process_options(int argc, char **argv, struct cmdline_options *opt)
return Qtrue; return Qtrue;
} }
if (!(opt->disable & DISABLE_BIT(rubyopt)) && if ((opt->features & FEATURE_BIT(rubyopt)) &&
opt->safe_level == 0 && (s = getenv("RUBYOPT"))) { opt->safe_level == 0 && (s = getenv("RUBYOPT"))) {
VALUE src_enc_name = opt->src.enc.name; VALUE src_enc_name = opt->src.enc.name;
VALUE ext_enc_name = opt->ext.enc.name; VALUE ext_enc_name = opt->ext.enc.name;
@ -1436,10 +1437,10 @@ process_options(int argc, char **argv, struct cmdline_options *opt)
} }
} }
Init_ext(); /* load statically linked extensions before rubygems */ Init_ext(); /* load statically linked extensions before rubygems */
if (!(opt->disable & DISABLE_BIT(gems))) { if (opt->features & FEATURE_BIT(gems)) {
rb_define_module("Gem"); rb_define_module("Gem");
} }
if (!(opt->disable & DISABLE_BIT(did_you_mean))) { if (opt->features & FEATURE_BIT(did_you_mean)) {
rb_define_module("DidYouMean"); rb_define_module("DidYouMean");
} }
ruby_init_prelude(); ruby_init_prelude();