mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
ruby.c: --debug=frozen-string-literal option
* ruby.c (need_argument): move frozen-string-literal-debug option from --enable to --debug. [Feature #11725] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c033efddea
commit
82bd486e99
4 changed files with 30 additions and 17 deletions
|
@ -1,4 +1,7 @@
|
|||
Sat Nov 21 18:41:53 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
Sat Nov 21 18:57:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* ruby.c (need_argument): move frozen-string-literal-debug option
|
||||
from --enable to --debug. [Feature #11725]
|
||||
|
||||
* ruby.c (proc_options): fix pointer overrun. do not advance argv
|
||||
until it is valid.
|
||||
|
|
24
ruby.c
24
ruby.c
|
@ -755,7 +755,6 @@ feature_option(const char *str, int len, void *arg, const unsigned int enable)
|
|||
SET_FEATURE(did_you_mean);
|
||||
SET_FEATURE(rubyopt);
|
||||
SET_FEATURE(frozen_string_literal);
|
||||
SET_FEATURE(frozen_string_literal_debug);
|
||||
if (NAME_MATCH_P("all", str, len)) {
|
||||
found:
|
||||
*argp = (*argp & ~mask) | (mask & enable);
|
||||
|
@ -777,6 +776,14 @@ disable_option(const char *str, int len, void *arg)
|
|||
feature_option(str, len, arg, 0U);
|
||||
}
|
||||
|
||||
static void
|
||||
debug_option(const char *str, int len, void *arg)
|
||||
{
|
||||
#define SET_WHEN_DEBUG(t, bit) SET_WHEN(#bit, t##_BIT(bit), str, len)
|
||||
SET_WHEN_DEBUG(FEATURE, frozen_string_literal_debug);
|
||||
rb_warn("unknown argument for --debug: `%.*s'", len, str);
|
||||
}
|
||||
|
||||
static void
|
||||
dump_option(const char *str, int len, void *arg)
|
||||
{
|
||||
|
@ -1087,22 +1094,25 @@ proc_options(long argc, char **argv, struct cmdline_options *opt, int envopt)
|
|||
# define check_envopt(name, allow_envopt) \
|
||||
(((allow_envopt) || !envopt) ? (void)0 : \
|
||||
rb_raise(rb_eRuntimeError, "invalid switch in RUBYOPT: --" name))
|
||||
# define need_argument(name, s, needs_arg) \
|
||||
((*(s) ? !*++(s) : (!argc || !((s) = argv[1]) || (--argc, ++argv, 0))) && (needs_arg) ? \
|
||||
# define need_argument(name, s, needs_arg, next_arg) \
|
||||
((*(s) ? !*++(s) : (next_arg) && (!argc || !((s) = argv[1]) || (--argc, ++argv, 0))) && (needs_arg) ? \
|
||||
rb_raise(rb_eRuntimeError, "missing argument for --" name) \
|
||||
: (void)0)
|
||||
# define is_option_with_arg(name, allow_hyphen, allow_envopt) \
|
||||
is_option_with_optarg(name, allow_hyphen, allow_envopt, Qtrue)
|
||||
# define is_option_with_optarg(name, allow_hyphen, allow_envopt, needs_arg) \
|
||||
is_option_with_optarg(name, allow_hyphen, allow_envopt, Qtrue, Qtrue)
|
||||
# define is_option_with_optarg(name, allow_hyphen, allow_envopt, needs_arg, next_arg) \
|
||||
(strncmp((name), s, n = sizeof(name) - 1) == 0 && is_option_end(s[n], (allow_hyphen)) ? \
|
||||
(check_envopt(name, (allow_envopt)), s += n, \
|
||||
need_argument(name, s, needs_arg), 1) : 0)
|
||||
need_argument(name, s, needs_arg, next_arg), 1) : 0)
|
||||
|
||||
if (strcmp("copyright", s) == 0) {
|
||||
if (envopt) goto noenvopt_long;
|
||||
opt->dump |= DUMP_BIT(copyright);
|
||||
}
|
||||
else if (strcmp("debug", s) == 0) {
|
||||
else if (is_option_with_optarg("debug", Qtrue, Qtrue, Qfalse, Qfalse)) {
|
||||
if (s && *s) {
|
||||
ruby_each_words(s, debug_option, &opt->features);
|
||||
}
|
||||
ruby_debug = Qtrue;
|
||||
ruby_verbose = Qtrue;
|
||||
}
|
||||
|
|
|
@ -705,7 +705,7 @@ class TestMarshal < Test::Unit::TestCase
|
|||
expected = out
|
||||
|
||||
opt << "--enable=frozen-string-literal"
|
||||
opt << "--enable=frozen-string-literal-debug"
|
||||
opt << "--debug=frozen-string-literal"
|
||||
out, err, status = EnvUtil.invoke_ruby(*args)
|
||||
assert_empty(err)
|
||||
assert_predicate(status, :success?)
|
||||
|
|
|
@ -806,14 +806,14 @@ class TestRubyOptions < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_frozen_string_literal_debug
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", "--enable-frozen-string-literal-debug" ], '"foo" << "bar"', [], /created at/)
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", "--disable-frozen-string-literal-debug"], '"foo" << "bar"', [], /created at/)
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", "--enable-frozen-string-literal-debug" ], '"foo#{123}bar" << "bar"', [], /created at/)
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", "--disable-frozen-string-literal-debug"], '"foo#{123}bar" << "bar"', [], /can\'t modify frozen String \(RuntimeError\)\n\z/)
|
||||
assert_in_out_err(["--disable=gems", "--disable-frozen-string-literal", "--enable-frozen-string-literal-debug" ], '"foo" << "bar"', [], [])
|
||||
assert_in_out_err(["--disable=gems", "--disable-frozen-string-literal", "--disable-frozen-string-literal-debug"], '"foo" << "bar"', [], [])
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal-debug" ], '"foo" << "bar"', [], [])
|
||||
assert_in_out_err(["--disable=gems", "--disable-frozen-string-literal-debug"], '"foo" << "bar"', [], [])
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", "--debug-frozen-string-literal" ], '"foo" << "bar"', [], /created at/)
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", ], '"foo" << "bar"', [], /created at/)
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", "--debug-frozen-string-literal" ], '"foo#{123}bar" << "bar"', [], /created at/)
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", ], '"foo#{123}bar" << "bar"', [], /can\'t modify frozen String \(RuntimeError\)\n\z/)
|
||||
assert_in_out_err(["--disable=gems", "--disable-frozen-string-literal", "--debug-frozen-string-literal" ], '"foo" << "bar"', [], [])
|
||||
assert_in_out_err(["--disable=gems", "--disable-frozen-string-literal", ], '"foo" << "bar"', [], [])
|
||||
assert_in_out_err(["--disable=gems", "--debug-frozen-string-literal" ], '"foo" << "bar"', [], [])
|
||||
assert_in_out_err(["--disable=gems", ], '"foo" << "bar"', [], [])
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", ], '"foo" << "bar"', [], /created at/)
|
||||
assert_in_out_err(["--disable=gems", "--enable-frozen-string-literal", ], '"foo#{123}bar" << "bar"', [], /can\'t modify frozen String \(RuntimeError\)\n\z/)
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue