diff options
-rw-r--r-- | ruby.c | 5 | ||||
-rw-r--r-- | test/ruby/test_exception.rb | 12 |
2 files changed, 15 insertions, 2 deletions
@@ -2085,11 +2085,11 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) ruby_set_argv(argc, argv); process_sflag(&opt->sflag); - rb_parser_set_context(parser, 0, TRUE); - if (opt->e_script) { VALUE progname = rb_progname; rb_encoding *eenc; + rb_parser_set_context(parser, 0, TRUE); + if (opt->src.enc.index >= 0) { eenc = rb_enc_from_index(opt->src.enc.index); } @@ -2114,6 +2114,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) else { VALUE f; f = open_load_file(script_name, &opt->xflag); + rb_parser_set_context(parser, 0, f == rb_stdin); ast = load_file(parser, opt->script_name, f, 1, opt); } ruby_set_script_name(opt->script_name); diff --git a/test/ruby/test_exception.rb b/test/ruby/test_exception.rb index 1d3ff6ac18..36f778975b 100644 --- a/test/ruby/test_exception.rb +++ b/test/ruby/test_exception.rb @@ -1473,6 +1473,18 @@ $stderr = $stdout; raise "\x82\xa0"') do |outs, errs, status| end; pattern = /^<detail\.rb>/ assert_in_out_err(%W[-r#{dir}/detail -], "1+", [], pattern) + + File.write(File.join(dir, "main.rb"), "#{<<~"begin;"}\n#{<<~'end;'}") + begin; + 1 + + end; + assert_in_out_err(%W[-r#{dir}/detail #{dir}/main.rb]) do |stdout, stderr,| + assert_empty(stdout) + assert_not_empty(stderr.grep(pattern)) + error, = stderr.grep(/unexpected end-of-input/) + assert_not_nil(error) + assert_match(/<.*unexpected end-of-input.*>/, error) + end end end end |