| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index be1dbcddd3b64f06e22019a770e5073e32697b70..1b9233f0910a4f151d48ef65b102b2da48dc2b36 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -2380,21 +2380,24 @@ static Object* Runtime_StringBuilderConcat(Arguments args) {
|
| if (object->IsFailure()) return object;
|
|
|
| String* answer = String::cast(object);
|
| + StringHasher hasher(length);
|
| for (int i = 0; i < array_length; i++) {
|
| Object* element = fixed_array->get(i);
|
| if (element->IsSmi()) {
|
| int len = Smi::cast(element)->value();
|
| int pos = len >> 11;
|
| len &= 0x7ff;
|
| - String::Flatten(special, answer, pos, pos + len, position);
|
| + String::Flatten(special, answer, pos, pos + len, position, &hasher);
|
| position += len;
|
| } else {
|
| String* string = String::cast(element);
|
| int element_length = string->length();
|
| - String::Flatten(string, answer, 0, element_length, position);
|
| + String::Flatten(string, answer, 0, element_length, position, &hasher);
|
| position += element_length;
|
| }
|
| }
|
| + if (hasher.is_valid())
|
| + answer->set_length_field(hasher.GetHashField());
|
| return answer;
|
| }
|
|
|
|
|