aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-28 07:22:43 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-28 07:22:43 +0000
commit4079a35447218918a2494b5d7242c9a80b540183 (patch)
treea5b9f053fb5b66c3316cfe3615896660db6adf67
parentc98b8d622b0d008dc881f92b1f71aebac009fcf2 (diff)
downloadruby-4079a35447218918a2494b5d7242c9a80b540183.tar.gz
ruby.c: no -r when dump
* ruby.c (process_options, load_file_internal2): should not require other files when dump option is given. [ruby-dev:48712] [Bug #10435] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48175 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--ruby.c12
-rw-r--r--test/ruby/test_rubyoptions.rb37
3 files changed, 51 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index bac9627f06..5c2e2ab23a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Oct 28 16:22:41 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options, load_file_internal2): should not
+ require other files when dump option is given.
+ [ruby-dev:48712] [Bug #10435]
+
Tue Oct 28 14:51:38 2014 NARUSE, Yui <naruse@ruby-lang.org>
* configure.in: remove apple-gcc4.2 from CC candidates.
diff --git a/ruby.c b/ruby.c
index d0130ec7d3..e5c4f8f311 100644
--- a/ruby.c
+++ b/ruby.c
@@ -1415,8 +1415,10 @@ process_options(int argc, char **argv, struct cmdline_options *opt)
eenc = lenc;
}
rb_enc_associate(opt->e_script, eenc);
- ruby_set_script_name(opt->script_name);
- require_libraries(&opt->req_list);
+ if (!(opt->dump & ~DUMP_BIT(version_v))) {
+ ruby_set_script_name(opt->script_name);
+ require_libraries(&opt->req_list);
+ }
ruby_set_script_name(progname);
PREPARE_PARSE_MAIN({
@@ -1612,8 +1614,10 @@ load_file_internal2(VALUE argp_v)
if (f != rb_stdin) rb_io_close(f);
f = Qnil;
}
- ruby_set_script_name(opt->script_name);
- require_libraries(&opt->req_list); /* Why here? unnatural */
+ if (!(opt->dump & ~DUMP_BIT(version_v))) {
+ ruby_set_script_name(opt->script_name);
+ require_libraries(&opt->req_list); /* Why here? unnatural */
+ }
}
if (opt->src.enc.index >= 0) {
enc = rb_enc_from_index(opt->src.enc.index);
diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb
index d4e5b2ac9c..ac7cc7b210 100644
--- a/test/ruby/test_rubyoptions.rb
+++ b/test/ruby/test_rubyoptions.rb
@@ -710,4 +710,41 @@ class TestRubyOptions < Test::Unit::TestCase
bug7157 = '[ruby-core:47967]'
assert_in_out_err(['-p', '-e', 'sub(/t.*/){"TEST"}'], %[test], %w[TEST], [], bug7157)
end
+
+ def assert_norun_with_rflag(opt)
+ bug10435 = "[ruby-dev:48712] [Bug #10435]: should not run with #{opt} option"
+ stderr = []
+ Tempfile.create(%w"bug10435- .rb") do |script|
+ dir, base = File.split(script.path)
+ script.puts "abort ':run'"
+ script.close
+ opts = ['-C', dir, '-r', "./#{base}", opt]
+ assert_in_out_err([*opts, '-ep']) do |_, e|
+ stderr.concat(e)
+ end
+ stderr << "---"
+ assert_in_out_err([*opts, base]) do |_, e|
+ stderr.concat(e)
+ end
+ end
+ assert_not_include(stderr, ":run", bug10435)
+ end
+
+ def test_dump_syntax_with_rflag
+ assert_norun_with_rflag('-c')
+ assert_norun_with_rflag('--dump=syntax')
+ end
+
+ def test_dump_yydebug_with_rflag
+ assert_norun_with_rflag('-y')
+ assert_norun_with_rflag('--dump=yydebug')
+ end
+
+ def test_dump_parsetree_with_rflag
+ assert_norun_with_rflag('--dump=parsetree')
+ end
+
+ def test_dump_insns_with_rflag
+ assert_norun_with_rflag('--dump=insns')
+ end
end