mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Only iterate Lexer heredoc arrays
The last element in the `@buf` may be either an array or an `Elem`. In the case it is an `Elem` we iterate over every element, when we do not need to. This check guards that case by ensuring that we only iterate over an array of elements.
This commit is contained in:
parent
3f74eaa7a8
commit
3685b5af95
Notes:
git
2021-12-02 15:56:03 +09:00
1 changed files with 12 additions and 10 deletions
|
@ -166,17 +166,19 @@ class Ripper
|
|||
def on_heredoc_dedent(v, w)
|
||||
ignored_sp = []
|
||||
heredoc = @buf.last
|
||||
heredoc.each_with_index do |e, i|
|
||||
if Elem === e and e.event == :on_tstring_content and e.pos[1].zero?
|
||||
tok = e.tok.dup if w > 0 and /\A\s/ =~ e.tok
|
||||
if (n = dedent_string(e.tok, w)) > 0
|
||||
if e.tok.empty?
|
||||
e.tok = tok[0, n]
|
||||
e.event = :on_ignored_sp
|
||||
next
|
||||
if Array === heredoc
|
||||
heredoc.each_with_index do |e, i|
|
||||
if Elem === e and e.event == :on_tstring_content and e.pos[1].zero?
|
||||
tok = e.tok.dup if w > 0 and /\A\s/ =~ e.tok
|
||||
if (n = dedent_string(e.tok, w)) > 0
|
||||
if e.tok.empty?
|
||||
e.tok = tok[0, n]
|
||||
e.event = :on_ignored_sp
|
||||
next
|
||||
end
|
||||
ignored_sp << [i, Elem.new(e.pos.dup, :on_ignored_sp, tok[0, n], e.state)]
|
||||
e.pos[1] += n
|
||||
end
|
||||
ignored_sp << [i, Elem.new(e.pos.dup, :on_ignored_sp, tok[0, n], e.state)]
|
||||
e.pos[1] += n
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue