ripper: fix a bug of Ripper::Lexer with syntax error and heredoc [Bug #17644]

This commit is contained in:
Shugo Maeda 2021-02-19 16:38:34 +09:00
Родитель 7b9476fbfa
Коммит 5de38c41ae
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 2DFE34085E97CE47
2 изменённых файлов: 13 добавлений и 1 удалений

Просмотреть файл

@ -136,7 +136,7 @@ class Ripper
end
@buf.flatten!
unless (result = @buf).empty?
result.concat(@buf) until (@buf = []; super(); @buf.empty?)
result.concat(@buf) until (@buf = []; super(); @buf.flatten!; @buf.empty?)
end
result
end

Просмотреть файл

@ -216,4 +216,16 @@ class TestRipper::Lexer < Test::Unit::TestCase
end
end
end
def test_lex_with_syntax_error_and_heredo
bug = '[Bug #17644]'
s = <<~EOF
foo
end
<<~EOS
bar
EOS
EOF
assert_equal([[5, 0], :on_heredoc_end, "EOS\n", state(:EXPR_BEG)], Ripper.lex(s).last, bug)
end
end