summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-02-02 10:52:38 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-02-02 12:20:10 +0900
commitfad48fefe19cc282a5b209944244a3713359b47f (patch)
treebf63879d90d418049f61245f9e807bdcb09d783c
parentf499c81b01b5c4b7a2ce11d6467d793669d67695 (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.rb2
-rw-r--r--test/ripper/test_lexer.rb12
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