зеркало из https://github.com/github/ruby.git
ruby.c: feature bits
* 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:
Родитель
b885cec842
Коммит
f9a9193ae0
47
ruby.c
47
ruby.c
|
@ -59,12 +59,12 @@ char *getenv();
|
|||
#define DEFAULT_RUBYGEMS_ENABLED "enabled"
|
||||
#endif
|
||||
|
||||
#define DISABLE_BIT(bit) (1U << disable_##bit)
|
||||
enum disable_flag_bits {
|
||||
disable_gems,
|
||||
disable_did_you_mean,
|
||||
disable_rubyopt,
|
||||
disable_flag_count
|
||||
#define FEATURE_BIT(bit) (1U << feature_##bit)
|
||||
enum feature_flag_bits {
|
||||
feature_gems,
|
||||
feature_did_you_mean,
|
||||
feature_rubyopt,
|
||||
feature_flag_count
|
||||
};
|
||||
|
||||
#define DUMP_BIT(bit) (1U << dump_##bit)
|
||||
|
@ -87,7 +87,7 @@ struct cmdline_options {
|
|||
int do_loop, do_print;
|
||||
int do_line, do_split;
|
||||
int do_search;
|
||||
unsigned int disable;
|
||||
unsigned int features;
|
||||
int verbose;
|
||||
int safe_level;
|
||||
unsigned int setids;
|
||||
|
@ -116,8 +116,9 @@ cmdline_options_init(struct cmdline_options *opt)
|
|||
opt->src.enc.index = src_encoding_index;
|
||||
opt->ext.enc.index = -1;
|
||||
opt->intern.enc.index = -1;
|
||||
opt->features = ~0U;
|
||||
#if DISABLE_RUBYGEMS
|
||||
opt->disable |= DISABLE_BIT(gems);
|
||||
opt->features &= ~FEATURE_BIT(gems);
|
||||
#endif
|
||||
return opt;
|
||||
}
|
||||
|
@ -710,12 +711,12 @@ moreswitches(const char *s, struct cmdline_options *opt, int envopt)
|
|||
static void
|
||||
enable_option(const char *str, int len, void *arg)
|
||||
{
|
||||
#define UNSET_WHEN_DISABLE(bit) UNSET_WHEN(#bit, DISABLE_BIT(bit), str, len)
|
||||
UNSET_WHEN_DISABLE(gems);
|
||||
UNSET_WHEN_DISABLE(did_you_mean);
|
||||
UNSET_WHEN_DISABLE(rubyopt);
|
||||
#define SET_WHEN_ENABLE(bit) SET_WHEN(#bit, FEATURE_BIT(bit), str, len)
|
||||
SET_WHEN_ENABLE(gems);
|
||||
SET_WHEN_ENABLE(did_you_mean);
|
||||
SET_WHEN_ENABLE(rubyopt);
|
||||
if (NAME_MATCH_P("all", str, len)) {
|
||||
*(unsigned int *)arg = 0U;
|
||||
*(unsigned int *)arg = ~0U;
|
||||
return;
|
||||
}
|
||||
rb_warn("unknown argument for --enable: `%.*s'", len, str);
|
||||
|
@ -724,12 +725,12 @@ enable_option(const char *str, int len, void *arg)
|
|||
static void
|
||||
disable_option(const char *str, int len, void *arg)
|
||||
{
|
||||
#define SET_WHEN_DISABLE(bit) SET_WHEN(#bit, DISABLE_BIT(bit), str, len)
|
||||
SET_WHEN_DISABLE(gems);
|
||||
SET_WHEN_DISABLE(did_you_mean);
|
||||
SET_WHEN_DISABLE(rubyopt);
|
||||
#define UNSET_WHEN_DISABLE(bit) UNSET_WHEN(#bit, FEATURE_BIT(bit), str, len)
|
||||
UNSET_WHEN_DISABLE(gems);
|
||||
UNSET_WHEN_DISABLE(did_you_mean);
|
||||
UNSET_WHEN_DISABLE(rubyopt);
|
||||
if (NAME_MATCH_P("all", str, len)) {
|
||||
*(unsigned int *)arg = ~0U;
|
||||
*(unsigned int *)arg = 0U;
|
||||
return;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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)) {
|
||||
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)) {
|
||||
char *p;
|
||||
|
@ -1324,7 +1325,7 @@ process_options(int argc, char **argv, struct cmdline_options *opt)
|
|||
return Qtrue;
|
||||
}
|
||||
|
||||
if (!(opt->disable & DISABLE_BIT(rubyopt)) &&
|
||||
if ((opt->features & FEATURE_BIT(rubyopt)) &&
|
||||
opt->safe_level == 0 && (s = getenv("RUBYOPT"))) {
|
||||
VALUE src_enc_name = opt->src.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 */
|
||||
if (!(opt->disable & DISABLE_BIT(gems))) {
|
||||
if (opt->features & FEATURE_BIT(gems)) {
|
||||
rb_define_module("Gem");
|
||||
}
|
||||
if (!(opt->disable & DISABLE_BIT(did_you_mean))) {
|
||||
if (opt->features & FEATURE_BIT(did_you_mean)) {
|
||||
rb_define_module("DidYouMean");
|
||||
}
|
||||
ruby_init_prelude();
|
||||
|
|
Загрузка…
Ссылка в новой задаче