hphp/runtime/ext/ext_collections.h
void mutate() {
    if (arrayData()->hasMultipleRefs()) {
      // mutateImpl() does two things for us. First it drops the the
      // immutable collection held by m_immCopy (if m_immCopy is not
      // null). Second, it takes care of copying the buffer if needed.
      mutateImpl();
    }
  }
/**
   * mutate() must be called before any doing anything that mutates this
   * Vector's buffer, unless it can be proven that canMutateBuffer() is
   * true. mutate() takes care of updating m_immCopy and making a copy
   * this Vector's buffer if needed.
   */
mutate() must be called before any doing anything that mutates this
Vector's buffer, unless it can be proven that canMutateBuffer() is
true. mutate() takes care of updating m_immCopy and making a copy
this Vector's buffer if needed.
mutate () must be called before any doing anything that mutates this Vector ' s buffer unless it can be proven that canMutateBuffer () is true . mutate () takes care of updating m_immCopy and making a copy this Vector ' s buffer if needed .
void mutate() {
    if (arrayData()->hasMultipleRefs()) {
      mutateImpl();
    }
  }
void mutate ( ) { if ( arrayData ( ) -> hasMultipleRefs ( ) ) { mutateImpl ( ) ; } }
mutate() must be called before any doing anything that mutates this
 Vector's buffer, unless it can be proven that canMutateBuffer() is
 true.
mutate () must be called before any doing anything that mutates this Vector ' s buffer unless it can be proven that canMutateBuffer () is true .
// mutateImpl() does two things for us. First it drops the the // immutable collection held by m_immCopy (if m_immCopy is not // null). Second, it takes care of copying the buffer if needed.