diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-08-11 22:24:47 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-08-12 15:58:18 +0900 |
commit | 844a0edbae6e74293e3d0cb1ceeeb66a4371d06d (patch) | |
tree | 7e1652945a9a290633476d2dd8b09e5e8fa69025 | |
parent | 803a07263001e5466bba0f53fcc85784f4b5c686 (diff) | |
download | ruby-844a0edbae6e74293e3d0cb1ceeeb66a4371d06d.tar.gz |
[Bug #18962] Do not read again once reached EOF
`Ripper::Lexer#parse` re-parses the source code with syntax errors
when `raise_errors: false`.
Co-Authored-By: tompng <tomoyapenguin@gmail.com>
-rw-r--r-- | parse.y | 1 | ||||
-rw-r--r-- | test/ripper/test_lexer.rb | 14 |
2 files changed, 15 insertions, 0 deletions
@@ -9299,6 +9299,7 @@ parser_yylex(struct parser_params *p) case '\004': /* ^D */ case '\032': /* ^Z */ case -1: /* end of script. */ + p->eofp = 1; return 0; /* white spaces */ diff --git a/test/ripper/test_lexer.rb b/test/ripper/test_lexer.rb index 83130668be..4f3f4657ef 100644 --- a/test/ripper/test_lexer.rb +++ b/test/ripper/test_lexer.rb @@ -100,6 +100,20 @@ class TestRipper::Lexer < Test::Unit::TestCase assert_equal expect, Ripper.lex(src).map {|e| e[1]} end + def test_end_of_script_char + all_assertions do |all| + ["a", %w"[a ]", %w"{, }", "if"].each do |src, append| + expected = Ripper.lex(src).map {|e| e[1]} + ["\0b", "\4b", "\32b"].each do |eof| + c = "#{src}#{eof}#{append}" + all.for(c) do + assert_equal expected, Ripper.lex(c).map {|e| e[1]} + end + end + end + end + end + def test_slice assert_equal "string\#{nil}\n", Ripper.slice(%(<<HERE\nstring\#{nil}\nHERE), "heredoc_beg .*? nl $(.*?) heredoc_end", 1) |