| Index: src/heap-inl.h
|
| diff --git a/src/heap-inl.h b/src/heap-inl.h
|
| index 4a827fef176fd57cafb2c929bb834cd229737aaa..1bc6e8db5aa141f9fa11b9510c2c3403a102a347 100644
|
| --- a/src/heap-inl.h
|
| +++ b/src/heap-inl.h
|
| @@ -83,9 +83,14 @@ void PromotionQueue::ActivateGuardIfOnTheSamePage() {
|
|
|
|
|
| MaybeObject* Heap::AllocateStringFromUtf8(Vector<const char> str,
|
| - PretenureFlag pretenure) {
|
| - // Check for ASCII first since this is the common case.
|
| - if (String::IsAscii(str.start(), str.length())) {
|
| + PretenureFlag pretenure,
|
| + String::AsciiHint ascii_hint) {
|
| + if ((ascii_hint == String::MAYBE_ASCII &&
|
| + String::IsAscii(str.start(), str.length())) ||
|
| + ascii_hint == String::ASCII) {
|
| + // Assert that the ASCII-hint is correct.
|
| + ASSERT(ascii_hint != String::ASCII ||
|
| + String::IsAscii(str.start(), str.length()));
|
| // If the string is ASCII, we do not need to convert the characters
|
| // since UTF8 is backwards compatible with ASCII.
|
| return AllocateStringFromAscii(str, pretenure);
|
| @@ -95,6 +100,24 @@ MaybeObject* Heap::AllocateStringFromUtf8(Vector<const char> str,
|
| }
|
|
|
|
|
| +MaybeObject* Heap::AllocateStringFromLatin1(Vector<const char> str,
|
| + PretenureFlag pretenure,
|
| + String::AsciiHint ascii_hint) {
|
| + if ((ascii_hint == String::MAYBE_ASCII &&
|
| + String::IsAscii(str.start(), str.length())) ||
|
| + ascii_hint == String::ASCII) {
|
| + // Assert that the strict ASCII-hint is correct.
|
| + ASSERT(ascii_hint != String::ASCII ||
|
| + String::IsAscii(str.start(), str.length()));
|
| + // If the string is ASCII, we do not need to convert the characters
|
| + // since Latin1 is backwards compatible with ASCII.
|
| + return AllocateStringFromAscii(str, pretenure);
|
| + }
|
| + // Non-ASCII and we need to decode.
|
| + return AllocateStringFromLatin1Slow(str, pretenure);
|
| +}
|
| +
|
| +
|
| MaybeObject* Heap::AllocateSymbol(Vector<const char> str,
|
| int chars,
|
| uint32_t hash_field) {
|
|
|