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) { |