- if (stringImpl->is8Bit()) {
- for (unsigned i = 0; i < length; ++i) {
- *data = stringImpl->characters8()[i];
- ++data;
+ CharacterType* data;
+ String result = StringImpl::tryCreateUninitialized(joinedLength, data);
+ if (result.isNull())
+ return result;
+
+ appendStringToData(data, strings[0].view);
+
+ unsigned size = strings.size();
+
+ switch (separator.length()) {
+ case 0:
+ for (unsigned i = 1; i < size; ++i)
+ appendStringToData(data, strings[i].view);
+ break;
+ case 1: {
+ CharacterType separatorCharacter = separator[0];
+ for (unsigned i = 1; i < size; ++i) {
+ *data++ = separatorCharacter;
+ appendStringToData(data, strings[i].view);