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 |