copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);
nsReadingIterator<CharT> fromBegin, fromEnd; CharT* toBegin = buffer; copy_string(aReadable.BeginReading(fromBegin), aReadable.EndReading(fromEnd), toBegin);
basic_nsAWritableString<CharT>::InsertFromPromise( const basic_nsAReadableString<CharT>& aReadable, PRUint32 atPosition )  {    if ( !aReadable.Promises(*this) )      do_InsertFromReadable(aReadable, atPosition);    else      {        PRUint32 length = aReadable.Length();        CharT* buffer = new CharT[length];        if ( buffer )          {            copy_string(aReadable.BeginReading(), aReadable.EndReading(), buffer);            do_InsertFromElementPtrLength(buffer, atPosition, length);            delete buffer;          }        // else assert      }  }