| 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 15996 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16007 } | 16007 } |
| 16008 SetEntry(entry, k, value, details); | 16008 SetEntry(entry, k, value, details); |
| 16009 ASSERT((Dictionary::KeyAt(entry)->IsNumber() || | 16009 ASSERT((Dictionary::KeyAt(entry)->IsNumber() || |
| 16010 Dictionary::KeyAt(entry)->IsName())); | 16010 Dictionary::KeyAt(entry)->IsName())); |
| 16011 DerivedHashTable::ElementAdded(); | 16011 DerivedHashTable::ElementAdded(); |
| 16012 return this; | 16012 return this; |
| 16013 } | 16013 } |
| 16014 | 16014 |
| 16015 | 16015 |
| 16016 void SeededNumberDictionary::UpdateMaxNumberKey(uint32_t key) { | 16016 void SeededNumberDictionary::UpdateMaxNumberKey(uint32_t key) { |
| 16017 DisallowHeapAllocation no_allocation; |
| 16017 // If the dictionary requires slow elements an element has already | 16018 // If the dictionary requires slow elements an element has already |
| 16018 // been added at a high index. | 16019 // been added at a high index. |
| 16019 if (requires_slow_elements()) return; | 16020 if (requires_slow_elements()) return; |
| 16020 // Check if this index is high enough that we should require slow | 16021 // Check if this index is high enough that we should require slow |
| 16021 // elements. | 16022 // elements. |
| 16022 if (key > kRequiresSlowElementsLimit) { | 16023 if (key > kRequiresSlowElementsLimit) { |
| 16023 set_requires_slow_elements(); | 16024 set_requires_slow_elements(); |
| 16024 return; | 16025 return; |
| 16025 } | 16026 } |
| 16026 // Update max key value. | 16027 // Update max key value. |
| 16027 Object* max_index_object = get(kMaxNumberKeyIndex); | 16028 Object* max_index_object = get(kMaxNumberKeyIndex); |
| 16028 if (!max_index_object->IsSmi() || max_number_key() < key) { | 16029 if (!max_index_object->IsSmi() || max_number_key() < key) { |
| 16029 FixedArray::set(kMaxNumberKeyIndex, | 16030 FixedArray::set(kMaxNumberKeyIndex, |
| 16030 Smi::FromInt(key << kRequiresSlowElementsTagSize)); | 16031 Smi::FromInt(key << kRequiresSlowElementsTagSize)); |
| 16031 } | 16032 } |
| 16032 } | 16033 } |
| 16033 | 16034 |
| 16035 |
| 16034 Handle<SeededNumberDictionary> SeededNumberDictionary::AddNumberEntry( | 16036 Handle<SeededNumberDictionary> SeededNumberDictionary::AddNumberEntry( |
| 16035 Handle<SeededNumberDictionary> dictionary, | 16037 Handle<SeededNumberDictionary> dictionary, |
| 16036 uint32_t key, | 16038 uint32_t key, |
| 16037 Handle<Object> value, | 16039 Handle<Object> value, |
| 16038 PropertyDetails details) { | 16040 PropertyDetails details) { |
| 16041 dictionary->UpdateMaxNumberKey(key); |
| 16042 SLOW_ASSERT(dictionary->FindEntry(key) == kNotFound); |
| 16039 CALL_HEAP_FUNCTION(dictionary->GetIsolate(), | 16043 CALL_HEAP_FUNCTION(dictionary->GetIsolate(), |
| 16040 dictionary->AddNumberEntry(key, *value, details), | 16044 dictionary->Add(key, *value, details), |
| 16041 SeededNumberDictionary); | 16045 SeededNumberDictionary); |
| 16042 } | 16046 } |
| 16043 | 16047 |
| 16044 MaybeObject* SeededNumberDictionary::AddNumberEntry(uint32_t key, | |
| 16045 Object* value, | |
| 16046 PropertyDetails details) { | |
| 16047 UpdateMaxNumberKey(key); | |
| 16048 SLOW_ASSERT(this->FindEntry(key) == kNotFound); | |
| 16049 return Add(key, value, details); | |
| 16050 } | |
| 16051 | |
| 16052 | |
| 16053 MaybeObject* UnseededNumberDictionary::AddNumberEntry(uint32_t key, | |
| 16054 Object* value) { | |
| 16055 SLOW_ASSERT(this->FindEntry(key) == kNotFound); | |
| 16056 return Add(key, value, PropertyDetails(NONE, NORMAL, 0)); | |
| 16057 } | |
| 16058 | |
| 16059 | 16048 |
| 16060 Handle<UnseededNumberDictionary> UnseededNumberDictionary::AddNumberEntry( | 16049 Handle<UnseededNumberDictionary> UnseededNumberDictionary::AddNumberEntry( |
| 16061 Handle<UnseededNumberDictionary> dictionary, | 16050 Handle<UnseededNumberDictionary> dictionary, |
| 16062 uint32_t key, | 16051 uint32_t key, |
| 16063 Handle<Object> value) { | 16052 Handle<Object> value) { |
| 16053 SLOW_ASSERT(dictionary->FindEntry(key) == kNotFound); |
| 16064 CALL_HEAP_FUNCTION(dictionary->GetIsolate(), | 16054 CALL_HEAP_FUNCTION(dictionary->GetIsolate(), |
| 16065 dictionary->AddNumberEntry(key, *value), | 16055 dictionary->Add( |
| 16056 key, *value, PropertyDetails(NONE, NORMAL, 0)), |
| 16066 UnseededNumberDictionary); | 16057 UnseededNumberDictionary); |
| 16067 } | 16058 } |
| 16068 | 16059 |
| 16069 | 16060 |
| 16070 MaybeObject* SeededNumberDictionary::AtNumberPut(uint32_t key, Object* value) { | 16061 MaybeObject* SeededNumberDictionary::AtNumberPut(uint32_t key, Object* value) { |
| 16071 UpdateMaxNumberKey(key); | 16062 UpdateMaxNumberKey(key); |
| 16072 return AtPut(key, value); | 16063 return AtPut(key, value); |
| 16073 } | 16064 } |
| 16074 | 16065 |
| 16075 | 16066 |
| (...skipping 1341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17417 #define ERROR_MESSAGES_TEXTS(C, T) T, | 17408 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 17418 static const char* error_messages_[] = { | 17409 static const char* error_messages_[] = { |
| 17419 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 17410 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 17420 }; | 17411 }; |
| 17421 #undef ERROR_MESSAGES_TEXTS | 17412 #undef ERROR_MESSAGES_TEXTS |
| 17422 return error_messages_[reason]; | 17413 return error_messages_[reason]; |
| 17423 } | 17414 } |
| 17424 | 17415 |
| 17425 | 17416 |
| 17426 } } // namespace v8::internal | 17417 } } // namespace v8::internal |
| OLD | NEW |