| Index: src/json-stringifier.h
|
| diff --git a/src/json-stringifier.h b/src/json-stringifier.h
|
| index bcdd64ce7643e57bb3732c51cfe2fb5d9a7b3217..a154a4e99a3db613a6ddf555cec9a1762773fff4 100644
|
| --- a/src/json-stringifier.h
|
| +++ b/src/json-stringifier.h
|
| @@ -295,19 +295,30 @@ MaybeObject* BasicJsonStringifier::StringifyString(Isolate* isolate,
|
| return stringifier.Stringify(object);
|
| }
|
|
|
| - FlattenString(object);
|
| - String::FlatContent flat = object->GetFlatContent();
|
| - if (flat.IsAscii()) {
|
| + object = FlattenGetString(object);
|
| + ASSERT(object->IsFlat());
|
| + if (object->IsOneByteRepresentation()) {
|
| + Handle<String> result =
|
| + isolate->factory()->NewRawOneByteString(worst_case_length);
|
| + AssertNoAllocation no_alloc;
|
| + const uint8_t* start = object->IsSeqOneByteString()
|
| + ? SeqOneByteString::cast(*object)->GetChars()
|
| + : ExternalAsciiString::cast(*object)->GetChars();
|
| return StringifyString_<SeqOneByteString>(
|
| isolate,
|
| - flat.ToOneByteVector(),
|
| - isolate->factory()->NewRawOneByteString(worst_case_length));
|
| + Vector<const uint8_t>(start, object->length()),
|
| + result);
|
| } else {
|
| - ASSERT(flat.IsTwoByte());
|
| + Handle<String> result =
|
| + isolate->factory()->NewRawTwoByteString(worst_case_length);
|
| + AssertNoAllocation no_alloc;
|
| + const uc16* start = object->IsSeqTwoByteString()
|
| + ? SeqTwoByteString::cast(*object)->GetChars()
|
| + : ExternalTwoByteString::cast(*object)->GetChars();
|
| return StringifyString_<SeqTwoByteString>(
|
| isolate,
|
| - flat.ToUC16Vector(),
|
| - isolate->factory()->NewRawTwoByteString(worst_case_length));
|
| + Vector<const uc16>(start, object->length()),
|
| + result);
|
| }
|
| }
|
|
|
|
|