class YARP::LexCompat::Heredoc::DashHeredoc

to keep track of the state that the heredoc was opened in.
that need to be split on “\n” to mimic Ripper’s behavior. We also need
Dash heredocs are a little more complicated. They are a list of tokens

def <<(token)

def <<(token)
  tokens << token
end

def initialize(split)

def initialize(split)
  @split = split
  @tokens = []
end

def to_a

def to_a
  embexpr_balance = 0
  tokens.each_with_object([]) do |token, results|
    case token.event
    when :on_embexpr_beg
      embexpr_balance += 1
      results << token
    when :on_embexpr_end
      embexpr_balance -= 1
      results << token
    when :on_tstring_content
      if embexpr_balance == 0
        lineno = token[0][0]
        column = token[0][1]
        if split
          # Split on "\\\n" to mimic Ripper's behavior. Use a lookbehind
          # to keep the delimiter in the result.
          token.value.split(/(?<=[^\\]\\\n)|(?<=[^\\]\\\r\n)/).each_with_index do |value, index|
            column = 0 if index > 0
            results << Token.new([[lineno, column], :on_tstring_content, value, token.state])
            lineno += value.count("\n")
          end
        else
          results << token
        end
      else
        results << token
      end
    else
      results << token
    end
  end
end