OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 10909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10920 i++) { | 10920 i++) { |
10921 new_table->set(i, get(i), mode); | 10921 new_table->set(i, get(i), mode); |
10922 } | 10922 } |
10923 | 10923 |
10924 // Rehash the elements. | 10924 // Rehash the elements. |
10925 int capacity = Capacity(); | 10925 int capacity = Capacity(); |
10926 for (int i = 0; i < capacity; i++) { | 10926 for (int i = 0; i < capacity; i++) { |
10927 uint32_t from_index = EntryToIndex(i); | 10927 uint32_t from_index = EntryToIndex(i); |
10928 Object* k = get(from_index); | 10928 Object* k = get(from_index); |
10929 if (IsKey(k)) { | 10929 if (IsKey(k)) { |
10930 uint32_t hash = Shape::HashForObject(key, k); | 10930 uint32_t hash = HashTable<Shape, Key>::HashForObject(key, k); |
10931 uint32_t insertion_index = | 10931 uint32_t insertion_index = |
10932 EntryToIndex(new_table->FindInsertionEntry(hash)); | 10932 EntryToIndex(new_table->FindInsertionEntry(hash)); |
10933 for (int j = 0; j < Shape::kEntrySize; j++) { | 10933 for (int j = 0; j < Shape::kEntrySize; j++) { |
10934 new_table->set(insertion_index + j, get(from_index + j), mode); | 10934 new_table->set(insertion_index + j, get(from_index + j), mode); |
10935 } | 10935 } |
10936 } | 10936 } |
10937 } | 10937 } |
10938 new_table->SetNumberOfElements(NumberOfElements()); | 10938 new_table->SetNumberOfElements(NumberOfElements()); |
10939 new_table->SetNumberOfDeletedElements(0); | 10939 new_table->SetNumberOfDeletedElements(0); |
10940 return new_table; | 10940 return new_table; |
(...skipping 1065 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12006 Object* obj; | 12006 Object* obj; |
12007 { MaybeObject* maybe_obj = EnsureCapacity(1, key); | 12007 { MaybeObject* maybe_obj = EnsureCapacity(1, key); |
12008 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 12008 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
12009 } | 12009 } |
12010 | 12010 |
12011 Object* k; | 12011 Object* k; |
12012 { MaybeObject* maybe_k = Shape::AsObject(key); | 12012 { MaybeObject* maybe_k = Shape::AsObject(key); |
12013 if (!maybe_k->ToObject(&k)) return maybe_k; | 12013 if (!maybe_k->ToObject(&k)) return maybe_k; |
12014 } | 12014 } |
12015 PropertyDetails details = PropertyDetails(NONE, NORMAL); | 12015 PropertyDetails details = PropertyDetails(NONE, NORMAL); |
12016 return Dictionary<Shape, Key>::cast(obj)-> | 12016 |
12017 AddEntry(key, value, details, Shape::Hash(key)); | 12017 return Dictionary<Shape, Key>::cast(obj)->AddEntry(key, value, details, |
| 12018 Dictionary<Shape, Key>::Hash(key)); |
12018 } | 12019 } |
12019 | 12020 |
12020 | 12021 |
12021 template<typename Shape, typename Key> | 12022 template<typename Shape, typename Key> |
12022 MaybeObject* Dictionary<Shape, Key>::Add(Key key, | 12023 MaybeObject* Dictionary<Shape, Key>::Add(Key key, |
12023 Object* value, | 12024 Object* value, |
12024 PropertyDetails details) { | 12025 PropertyDetails details) { |
12025 // Valdate key is absent. | 12026 // Valdate key is absent. |
12026 SLOW_ASSERT((this->FindEntry(key) == Dictionary<Shape, Key>::kNotFound)); | 12027 SLOW_ASSERT((this->FindEntry(key) == Dictionary<Shape, Key>::kNotFound)); |
12027 // Check whether the dictionary should be extended. | 12028 // Check whether the dictionary should be extended. |
12028 Object* obj; | 12029 Object* obj; |
12029 { MaybeObject* maybe_obj = EnsureCapacity(1, key); | 12030 { MaybeObject* maybe_obj = EnsureCapacity(1, key); |
12030 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 12031 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
12031 } | 12032 } |
12032 return Dictionary<Shape, Key>::cast(obj)-> | 12033 |
12033 AddEntry(key, value, details, Shape::Hash(key)); | 12034 return Dictionary<Shape, Key>::cast(obj)->AddEntry(key, value, details, |
| 12035 Dictionary<Shape, Key>::Hash(key)); |
12034 } | 12036 } |
12035 | 12037 |
12036 | 12038 |
12037 // Add a key, value pair to the dictionary. | 12039 // Add a key, value pair to the dictionary. |
12038 template<typename Shape, typename Key> | 12040 template<typename Shape, typename Key> |
12039 MaybeObject* Dictionary<Shape, Key>::AddEntry(Key key, | 12041 MaybeObject* Dictionary<Shape, Key>::AddEntry(Key key, |
12040 Object* value, | 12042 Object* value, |
12041 PropertyDetails details, | 12043 PropertyDetails details, |
12042 uint32_t hash) { | 12044 uint32_t hash) { |
12043 // Compute the key object. | 12045 // Compute the key object. |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12742 if (break_point_objects()->IsUndefined()) return 0; | 12744 if (break_point_objects()->IsUndefined()) return 0; |
12743 // Single break point. | 12745 // Single break point. |
12744 if (!break_point_objects()->IsFixedArray()) return 1; | 12746 if (!break_point_objects()->IsFixedArray()) return 1; |
12745 // Multiple break points. | 12747 // Multiple break points. |
12746 return FixedArray::cast(break_point_objects())->length(); | 12748 return FixedArray::cast(break_point_objects())->length(); |
12747 } | 12749 } |
12748 #endif // ENABLE_DEBUGGER_SUPPORT | 12750 #endif // ENABLE_DEBUGGER_SUPPORT |
12749 | 12751 |
12750 | 12752 |
12751 } } // namespace v8::internal | 12753 } } // namespace v8::internal |
OLD | NEW |