Index: src/runtime/runtime-strings.cc |
diff --git a/src/runtime/runtime-strings.cc b/src/runtime/runtime-strings.cc |
index 03b8a08afa09bea3a5936e67eb9ca1fed08abc4f..b109ae07b29e94d0a6efdfb97a6361405b40e287 100644 |
--- a/src/runtime/runtime-strings.cc |
+++ b/src/runtime/runtime-strings.cc |
@@ -497,89 +497,6 @@ RUNTIME_FUNCTION(Runtime_StringBuilderConcat) { |
} |
-RUNTIME_FUNCTION(Runtime_StringBuilderJoin) { |
- HandleScope scope(isolate); |
- DCHECK(args.length() == 3); |
- CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); |
- int32_t array_length; |
- if (!args[1]->ToInt32(&array_length)) { |
- THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError()); |
- } |
- CONVERT_ARG_HANDLE_CHECKED(String, separator, 2); |
- RUNTIME_ASSERT(array->HasFastObjectElements()); |
- RUNTIME_ASSERT(array_length >= 0); |
- |
- Handle<FixedArray> fixed_array(FixedArray::cast(array->elements())); |
- if (fixed_array->length() < array_length) { |
- array_length = fixed_array->length(); |
- } |
- |
- if (array_length == 0) { |
- return isolate->heap()->empty_string(); |
- } else if (array_length == 1) { |
- Object* first = fixed_array->get(0); |
- RUNTIME_ASSERT(first->IsString()); |
- return first; |
- } |
- |
- int separator_length = separator->length(); |
- RUNTIME_ASSERT(separator_length > 0); |
- int max_nof_separators = |
- (String::kMaxLength + separator_length - 1) / separator_length; |
- if (max_nof_separators < (array_length - 1)) { |
- THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError()); |
- } |
- int length = (array_length - 1) * separator_length; |
- for (int i = 0; i < array_length; i++) { |
- Object* element_obj = fixed_array->get(i); |
- RUNTIME_ASSERT(element_obj->IsString()); |
- String* element = String::cast(element_obj); |
- int increment = element->length(); |
- if (increment > String::kMaxLength - length) { |
- STATIC_ASSERT(String::kMaxLength < kMaxInt); |
- length = kMaxInt; // Provoke exception; |
- break; |
- } |
- length += increment; |
- } |
- |
- Handle<SeqTwoByteString> answer; |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
- isolate, answer, isolate->factory()->NewRawTwoByteString(length)); |
- |
- DisallowHeapAllocation no_gc; |
- |
- uc16* sink = answer->GetChars(); |
-#ifdef DEBUG |
- uc16* end = sink + length; |
-#endif |
- |
- RUNTIME_ASSERT(fixed_array->get(0)->IsString()); |
- String* first = String::cast(fixed_array->get(0)); |
- String* separator_raw = *separator; |
- int first_length = first->length(); |
- String::WriteToFlat(first, sink, 0, first_length); |
- sink += first_length; |
- |
- for (int i = 1; i < array_length; i++) { |
- DCHECK(sink + separator_length <= end); |
- String::WriteToFlat(separator_raw, sink, 0, separator_length); |
- sink += separator_length; |
- |
- RUNTIME_ASSERT(fixed_array->get(i)->IsString()); |
- String* element = String::cast(fixed_array->get(i)); |
- int element_length = element->length(); |
- DCHECK(sink + element_length <= end); |
- String::WriteToFlat(element, sink, 0, element_length); |
- sink += element_length; |
- } |
- DCHECK(sink == end); |
- |
- // Use %_FastOneByteArrayJoin instead. |
- DCHECK(!answer->IsOneByteRepresentation()); |
- return *answer; |
-} |
- |
template <typename Char> |
static void JoinSparseArrayWithSeparator(FixedArray* elements, |
int elements_length, |