Chromium Code Reviews| Index: src/objects-inl.h |
| diff --git a/src/objects-inl.h b/src/objects-inl.h |
| index 0aca5cfcdb488b0718af22d18c95afc69a17da19..d304b8d6170d21ab8ed93fadf7a8e0a8d35ebde9 100644 |
| --- a/src/objects-inl.h |
| +++ b/src/objects-inl.h |
| @@ -6580,6 +6580,31 @@ bool String::AsArrayIndex(uint32_t* index) { |
| } |
| +void String::SetForwardedInternalizedString(String* canonical) { |
| + ASSERT(IsInternalizedString()); |
| + ASSERT(HasHashCode()); |
| + if (canonical == this) return; // No need to forward. |
| + ASSERT(SlowEquals(canonical)); |
| + ASSERT(canonical->IsInternalizedString()); |
| + ASSERT(canonical->HasHashCode()); |
| + WRITE_FIELD(this, kHashFieldOffset, canonical); |
| + // With canonical being a string, the LSB is set. Interpreted as hash code, |
| + // this means that the hash code uninitialized. We use this for distinction. |
| + ASSERT(!HasHashCode()); |
|
mvstanton
2014/07/22 13:31:31
How about words along this line?
"Setting a tagge
Yang
2014/07/23 06:55:58
Done.
|
| +} |
| + |
| + |
| +String* String::GetForwardedInternalizedString() { |
| + ASSERT(IsInternalizedString()); |
| + if (HasHashCode()) return this; |
| + String* canonical = String::cast(READ_FIELD(this, kHashFieldOffset)); |
| + ASSERT(canonical->IsInternalizedString()); |
| + ASSERT(SlowEquals(canonical)); |
| + ASSERT(canonical->HasHashCode()); |
| + return canonical; |
| +} |
| + |
| + |
| Object* JSReceiver::GetConstructor() { |
| return map()->constructor(); |
| } |