class Opal::Rewriters::BinaryOperatorAssignment::SendHandler

(lhs is a recvr.meth, op is :+)
Produces ‘recvr.meth = recvr.meth + rhs`
Takes `recvr.meth += rhs`

def self.call(node, lhs, operation, rhs)

def self.call(node, lhs, operation, rhs)
  recvr, reader_method, *args = *lhs
  # If recvr is a complex expression it must be cached.
  # MRI calls recvr in `recvr.meth ||= rhs` only once.
  if recvr && recvr.type == :send
    recvr_tmp = new_temp
    cache_recvr = s(:lvasgn, recvr_tmp, recvr) # $tmp = recvr
    recvr = s(:js_tmp, recvr_tmp)
  end
  writer_method = :"#{reader_method}="
  call_reader = lhs.updated(:send, [recvr, reader_method, *args])          # $tmp.meth
  call_op = node.updated(:send, [call_reader, operation, rhs])             # $tmp.meth + rhs
  call_writer = lhs.updated(:send, [recvr, writer_method, *args, call_op]) # $tmp.meth = $tmp.meth + rhs
  if cache_recvr
    node.updated(:begin, [cache_recvr, call_writer])
  else
    call_writer
  end
end