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 + + * 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 * 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