aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--parse.y2
-rw-r--r--test/ruby/test_parse.rb6
2 files changed, 7 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index 27b1425047..28d232806f 100644
--- a/parse.y
+++ b/parse.y
@@ -5378,7 +5378,7 @@ parser_yyerror(struct parser_params *parser, const YYLTYPE *yylloc, const char *
}
pt = (ruby_sourceline == yylloc->last_loc.lineno) ?
- lex_p : lex_pend;
+ lex_pbeg + yylloc->last_loc.column : lex_pend;
p = pe = pt < pend ? pt : pend;
lim = p - lex_pbeg > max_line_margin ? p - max_line_margin : lex_pbeg;
while ((lim < p) && (*(p-1) != '\n')) p--;
diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb
index 15c6245bac..41aad0050d 100644
--- a/test/ruby/test_parse.rb
+++ b/test/ruby/test_parse.rb
@@ -1099,6 +1099,12 @@ x = __ENCODING__
assert_raise(SyntaxError) { eval("def m\n\C-z""end") }
end
+ def test_location_of_invalid_token
+ assert_raise_with_message(SyntaxError, /^ \^~~\z/) do
+ eval('class xxx end')
+ end
+ end
+
=begin
def test_past_scope_variable
assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}}