diff options
author | Nobuyoshi Nakada <[email protected]> | 2023-02-02 10:52:38 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2023-02-02 12:20:10 +0900 |
commit | fad48fefe19cc282a5b209944244a3713359b47f (patch) | |
tree | bf63879d90d418049f61245f9e807bdcb09d783c | |
parent | f499c81b01b5c4b7a2ce11d6467d793669d67695 (diff) |
[Bug #19399] Parsing invalid heredoc inside block parameter
Although this is of course invalid as Ruby code, allow to just parse
and tokenize.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7229
-rw-r--r-- | ext/ripper/lib/ripper/lexer.rb | 2 | ||||
-rw-r--r-- | test/ripper/test_lexer.rb | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/ext/ripper/lib/ripper/lexer.rb b/ext/ripper/lib/ripper/lexer.rb index 19c59e2ccc..6a3c04af30 100644 --- a/ext/ripper/lib/ripper/lexer.rb +++ b/ext/ripper/lib/ripper/lexer.rb @@ -228,7 +228,7 @@ class Ripper def on_heredoc_end(tok) @buf.push Elem.new([lineno(), column()], __callee__, tok, state()) - @buf = @stack.pop + @buf = @stack.pop unless @stack.empty? end def _push_token(tok) diff --git a/test/ripper/test_lexer.rb b/test/ripper/test_lexer.rb index 27e0007023..8e8a616627 100644 --- a/test/ripper/test_lexer.rb +++ b/test/ripper/test_lexer.rb @@ -252,4 +252,16 @@ world" ] assert_equal(code, Ripper.tokenize(code).join(""), bug) end + + def test_heredoc_inside_block_param + bug = '[Bug #19399]' + code = <<~CODE + a do |b + <<-C + C + | + end + CODE + assert_equal(code, Ripper.tokenize(code).join(""), bug) + end end |