| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 9c1a9cd69f5ee0ceba6416fdba0a2309660f541b..8256764158e47e88d6aa687ccb443cab0118a3ad 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -13990,19 +13990,63 @@ MaybeObject* OneByteStringKey::AsObject(Heap* heap) {
|
| }
|
|
|
|
|
| -MaybeObject* SubStringOneByteStringKey::AsObject(Heap* heap) {
|
| +MaybeObject* TwoByteStringKey::AsObject(Heap* heap) {
|
| + if (hash_field_ == 0) Hash();
|
| + return heap->AllocateTwoByteInternalizedString(string_, hash_field_);
|
| +}
|
| +
|
| +
|
| +template<>
|
| +const uint8_t* SubStringKey<uint8_t>::GetChars() {
|
| + return string_->IsSeqOneByteString()
|
| + ? SeqOneByteString::cast(*string_)->GetChars()
|
| + : ExternalAsciiString::cast(*string_)->GetChars();
|
| +}
|
| +
|
| +
|
| +template<>
|
| +const uint16_t* SubStringKey<uint16_t>::GetChars() {
|
| + return string_->IsSeqTwoByteString()
|
| + ? SeqTwoByteString::cast(*string_)->GetChars()
|
| + : ExternalTwoByteString::cast(*string_)->GetChars();
|
| +}
|
| +
|
| +
|
| +template<>
|
| +MaybeObject* SubStringKey<uint8_t>::AsObject(Heap* heap) {
|
| if (hash_field_ == 0) Hash();
|
| - Vector<const uint8_t> chars(string_->GetChars() + from_, length_);
|
| + Vector<const uint8_t> chars(GetChars() + from_, length_);
|
| return heap->AllocateOneByteInternalizedString(chars, hash_field_);
|
| }
|
|
|
|
|
| -MaybeObject* TwoByteStringKey::AsObject(Heap* heap) {
|
| +template<>
|
| +MaybeObject* SubStringKey<uint16_t>::AsObject(
|
| + Heap* heap) {
|
| if (hash_field_ == 0) Hash();
|
| - return heap->AllocateTwoByteInternalizedString(string_, hash_field_);
|
| + Vector<const uint16_t> chars(GetChars() + from_, length_);
|
| + return heap->AllocateTwoByteInternalizedString(chars, hash_field_);
|
| +}
|
| +
|
| +
|
| +template<>
|
| +bool SubStringKey<uint8_t>::IsMatch(Object* string) {
|
| + Vector<const uint8_t> chars(GetChars() + from_, length_);
|
| + return String::cast(string)->IsOneByteEqualTo(chars);
|
| }
|
|
|
|
|
| +template<>
|
| +bool SubStringKey<uint16_t>::IsMatch(Object* string) {
|
| + Vector<const uint16_t> chars(GetChars() + from_, length_);
|
| + return String::cast(string)->IsTwoByteEqualTo(chars);
|
| +}
|
| +
|
| +
|
| +template class SubStringKey<uint8_t>;
|
| +template class SubStringKey<uint16_t>;
|
| +
|
| +
|
| // InternalizedStringKey carries a string/internalized-string object as key.
|
| class InternalizedStringKey : public HashTableKey {
|
| public:
|
|
|