class Parser::Builders::Default

def match_op(receiver, match_t, arg)

def match_op(receiver, match_t, arg)
  source_map = send_binary_op_map(receiver, match_t, arg)
  if receiver.type == :regexp &&
        receiver.children.count == 2 &&
        receiver.children.first.type == :str
    str_node, opt_node = *receiver
    regexp_body, = *str_node
    *regexp_opt  = *opt_node
    if defined?(Encoding)
      regexp_body = case
      when regexp_opt.include?(:u)
        regexp_body.encode(Encoding::UTF_8)
      when regexp_opt.include?(:e)
        regexp_body.encode(Encoding::EUC_JP)
      when regexp_opt.include?(:s)
        regexp_body.encode(Encoding::WINDOWS_31J)
      when regexp_opt.include?(:n)
        regexp_body.encode(Encoding::BINARY)
      else
        regexp_body
      end
    end
    Regexp.new(regexp_body).names.each do |name|
      @parser.static_env.declare(name)
    end
    n(:match_with_lvasgn, [ receiver, arg ],
      source_map)
  else
    n(:send, [ receiver, :=~, arg ],
      source_map)
  end
end