summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ruby.c5
-rw-r--r--test/ruby/test_exception.rb12
2 files changed, 15 insertions, 2 deletions
diff --git a/ruby.c b/ruby.c
index fac0865302..b29f29e1f7 100644
--- a/ruby.c
+++ b/ruby.c
@@ -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