diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-11-21 09:57:31 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-11-21 09:57:31 +0000 |
commit | d848f9e74279986e7d56a894214a743325cd5360 (patch) | |
tree | 89944c9776af0b0bf24c12c496e5c0d98a686d0c | |
parent | 9f432ec8dc567c4b3544ec79966df4ecfa05a68f (diff) | |
download | ruby-d848f9e74279986e7d56a894214a743325cd5360.tar.gz |
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
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ruby.c | 24 | ||||
-rw-r--r-- | test/ruby/test_marshal.rb | 2 | ||||
-rw-r--r-- | test/ruby/test_rubyoptions.rb | 16 |
4 files changed, 30 insertions, 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. @@ -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); @@ -778,6 +777,14 @@ disable_option(const char *str, int len, void *arg) } 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) { #define SET_WHEN_DUMP(bit) SET_WHEN(#bit, DUMP_BIT(bit), str, len) @@ -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; } diff --git a/test/ruby/test_marshal.rb b/test/ruby/test_marshal.rb index 5aa13369a6..145244ec10 100644 --- a/test/ruby/test_marshal.rb +++ b/test/ruby/test_marshal.rb @@ -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?) diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb index 3d77d072b2..1f47e7bd0f 100644 --- a/test/ruby/test_rubyoptions.rb +++ b/test/ruby/test_rubyoptions.rb @@ -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 |