- Checked<unsigned, RecordOverflow> separatorLength = m_separator.length();
- // FIXME: add special cases of joinStrings() for (separatorLength == 0) and (separatorLength == 1).
- ASSERT(m_strings.size() > 0);
- Checked<unsigned, RecordOverflow> totalSeparactorsLength = separatorLength * (m_strings.size() - 1);
- Checked<unsigned, RecordOverflow> outputStringSize = totalSeparactorsLength + m_accumulatedStringsLength;
-
- unsigned finalSize;
- if (outputStringSize.safeGet(finalSize) == CheckedState::DidOverflow)
- return throwOutOfMemoryError(exec);
-
- if (!outputStringSize)
- return jsEmptyString(exec);
-
- RefPtr<StringImpl> outputStringImpl;
- if (m_is8Bits)
- outputStringImpl = joinStrings<LChar>(m_strings, m_separator, finalSize);
+ if (!length)
+ return jsEmptyString(&state);
+
+ String result;
+ if (m_isAll8Bit)
+ result = joinStrings<LChar>(m_strings, m_separator, length);