| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 16039 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16050 } | 16050 } |
| 16051 | 16051 |
| 16052 | 16052 |
| 16053 MaybeObject* UnseededNumberDictionary::AddNumberEntry(uint32_t key, | 16053 MaybeObject* UnseededNumberDictionary::AddNumberEntry(uint32_t key, |
| 16054 Object* value) { | 16054 Object* value) { |
| 16055 SLOW_ASSERT(this->FindEntry(key) == kNotFound); | 16055 SLOW_ASSERT(this->FindEntry(key) == kNotFound); |
| 16056 return Add(key, value, PropertyDetails(NONE, NORMAL, 0)); | 16056 return Add(key, value, PropertyDetails(NONE, NORMAL, 0)); |
| 16057 } | 16057 } |
| 16058 | 16058 |
| 16059 | 16059 |
| 16060 Handle<UnseededNumberDictionary> UnseededNumberDictionary::AddNumberEntry( |
| 16061 Handle<UnseededNumberDictionary> dictionary, |
| 16062 uint32_t key, |
| 16063 Handle<Object> value) { |
| 16064 CALL_HEAP_FUNCTION(dictionary->GetIsolate(), |
| 16065 dictionary->AddNumberEntry(key, *value), |
| 16066 UnseededNumberDictionary); |
| 16067 } |
| 16068 |
| 16069 |
| 16060 MaybeObject* SeededNumberDictionary::AtNumberPut(uint32_t key, Object* value) { | 16070 MaybeObject* SeededNumberDictionary::AtNumberPut(uint32_t key, Object* value) { |
| 16061 UpdateMaxNumberKey(key); | 16071 UpdateMaxNumberKey(key); |
| 16062 return AtPut(key, value); | 16072 return AtPut(key, value); |
| 16063 } | 16073 } |
| 16064 | 16074 |
| 16065 | 16075 |
| 16066 MaybeObject* UnseededNumberDictionary::AtNumberPut(uint32_t key, | 16076 MaybeObject* UnseededNumberDictionary::AtNumberPut(uint32_t key, |
| 16067 Object* value) { | 16077 Object* value) { |
| 16068 return AtPut(key, value); | 16078 return AtPut(key, value); |
| 16069 } | 16079 } |
| 16070 | 16080 |
| 16071 | 16081 |
| 16072 Handle<SeededNumberDictionary> SeededNumberDictionary::Set( | 16082 Handle<SeededNumberDictionary> SeededNumberDictionary::Set( |
| 16073 Handle<SeededNumberDictionary> dictionary, | 16083 Handle<SeededNumberDictionary> dictionary, |
| 16074 uint32_t index, | 16084 uint32_t key, |
| 16075 Handle<Object> value, | 16085 Handle<Object> value, |
| 16076 PropertyDetails details) { | 16086 PropertyDetails details) { |
| 16077 CALL_HEAP_FUNCTION(dictionary->GetIsolate(), | 16087 int entry = dictionary->FindEntry(key); |
| 16078 dictionary->Set(index, *value, details), | 16088 if (entry == kNotFound) { |
| 16079 SeededNumberDictionary); | 16089 return AddNumberEntry(dictionary, key, value, details); |
| 16090 } |
| 16091 // Preserve enumeration index. |
| 16092 details = PropertyDetails(details.attributes(), |
| 16093 details.type(), |
| 16094 dictionary->DetailsAt(entry).dictionary_index()); |
| 16095 Handle<Object> object_key = |
| 16096 SeededNumberDictionaryShape::AsHandle(dictionary->GetIsolate(), key); |
| 16097 dictionary->SetEntry(entry, *object_key, *value, details); |
| 16098 return dictionary; |
| 16080 } | 16099 } |
| 16081 | 16100 |
| 16082 | 16101 |
| 16083 Handle<UnseededNumberDictionary> UnseededNumberDictionary::Set( | 16102 Handle<UnseededNumberDictionary> UnseededNumberDictionary::Set( |
| 16084 Handle<UnseededNumberDictionary> dictionary, | 16103 Handle<UnseededNumberDictionary> dictionary, |
| 16085 uint32_t index, | 16104 uint32_t key, |
| 16086 Handle<Object> value) { | 16105 Handle<Object> value) { |
| 16087 CALL_HEAP_FUNCTION(dictionary->GetIsolate(), | 16106 int entry = dictionary->FindEntry(key); |
| 16088 dictionary->Set(index, *value), | 16107 if (entry == kNotFound) return AddNumberEntry(dictionary, key, value); |
| 16089 UnseededNumberDictionary); | 16108 Handle<Object> object_key = |
| 16109 UnseededNumberDictionaryShape::AsHandle(dictionary->GetIsolate(), key); |
| 16110 dictionary->SetEntry(entry, *object_key, *value); |
| 16111 return dictionary; |
| 16090 } | 16112 } |
| 16091 | 16113 |
| 16092 | 16114 |
| 16093 MaybeObject* SeededNumberDictionary::Set(uint32_t key, | |
| 16094 Object* value, | |
| 16095 PropertyDetails details) { | |
| 16096 int entry = FindEntry(key); | |
| 16097 if (entry == kNotFound) return AddNumberEntry(key, value, details); | |
| 16098 // Preserve enumeration index. | |
| 16099 details = PropertyDetails(details.attributes(), | |
| 16100 details.type(), | |
| 16101 DetailsAt(entry).dictionary_index()); | |
| 16102 MaybeObject* maybe_object_key = | |
| 16103 SeededNumberDictionaryShape::AsObject(GetHeap(), key); | |
| 16104 Object* object_key; | |
| 16105 if (!maybe_object_key->ToObject(&object_key)) return maybe_object_key; | |
| 16106 SetEntry(entry, object_key, value, details); | |
| 16107 return this; | |
| 16108 } | |
| 16109 | |
| 16110 | |
| 16111 MaybeObject* UnseededNumberDictionary::Set(uint32_t key, | |
| 16112 Object* value) { | |
| 16113 int entry = FindEntry(key); | |
| 16114 if (entry == kNotFound) return AddNumberEntry(key, value); | |
| 16115 MaybeObject* maybe_object_key = | |
| 16116 UnseededNumberDictionaryShape::AsObject(GetHeap(), key); | |
| 16117 Object* object_key; | |
| 16118 if (!maybe_object_key->ToObject(&object_key)) return maybe_object_key; | |
| 16119 SetEntry(entry, object_key, value); | |
| 16120 return this; | |
| 16121 } | |
| 16122 | |
| 16123 | |
| 16124 | 16115 |
| 16125 template<typename Derived, typename Shape, typename Key> | 16116 template<typename Derived, typename Shape, typename Key> |
| 16126 int Dictionary<Derived, Shape, Key>::NumberOfElementsFilterAttributes( | 16117 int Dictionary<Derived, Shape, Key>::NumberOfElementsFilterAttributes( |
| 16127 PropertyAttributes filter) { | 16118 PropertyAttributes filter) { |
| 16128 int capacity = DerivedHashTable::Capacity(); | 16119 int capacity = DerivedHashTable::Capacity(); |
| 16129 int result = 0; | 16120 int result = 0; |
| 16130 for (int i = 0; i < capacity; i++) { | 16121 for (int i = 0; i < capacity; i++) { |
| 16131 Object* k = DerivedHashTable::KeyAt(i); | 16122 Object* k = DerivedHashTable::KeyAt(i); |
| 16132 if (DerivedHashTable::IsKey(k) && !FilterKey(k, filter)) { | 16123 if (DerivedHashTable::IsKey(k) && !FilterKey(k, filter)) { |
| 16133 PropertyDetails details = DetailsAt(i); | 16124 PropertyDetails details = DetailsAt(i); |
| (...skipping 1292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17426 #define ERROR_MESSAGES_TEXTS(C, T) T, | 17417 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 17427 static const char* error_messages_[] = { | 17418 static const char* error_messages_[] = { |
| 17428 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 17419 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 17429 }; | 17420 }; |
| 17430 #undef ERROR_MESSAGES_TEXTS | 17421 #undef ERROR_MESSAGES_TEXTS |
| 17431 return error_messages_[reason]; | 17422 return error_messages_[reason]; |
| 17432 } | 17423 } |
| 17433 | 17424 |
| 17434 | 17425 |
| 17435 } } // namespace v8::internal | 17426 } } // namespace v8::internal |
| OLD | NEW |