| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/allocation-site-scopes.h" | 8 #include "src/allocation-site-scopes.h" |
| 9 #include "src/api.h" | 9 #include "src/api.h" |
| 10 #include "src/arguments.h" | 10 #include "src/arguments.h" |
| (...skipping 16122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16133 | 16133 |
| 16134 new_table->SetNumberOfElements(nof); | 16134 new_table->SetNumberOfElements(nof); |
| 16135 table->SetNextTable(*new_table); | 16135 table->SetNextTable(*new_table); |
| 16136 | 16136 |
| 16137 return new_table; | 16137 return new_table; |
| 16138 } | 16138 } |
| 16139 | 16139 |
| 16140 | 16140 |
| 16141 template<class Derived, class Iterator, int entrysize> | 16141 template<class Derived, class Iterator, int entrysize> |
| 16142 int OrderedHashTable<Derived, Iterator, entrysize>::FindEntry( | 16142 int OrderedHashTable<Derived, Iterator, entrysize>::FindEntry( |
| 16143 Handle<Object> key) { | 16143 Handle<Object> key, int hash) { |
| 16144 ASSERT(!IsObsolete()); | 16144 ASSERT(!IsObsolete()); |
| 16145 | 16145 |
| 16146 DisallowHeapAllocation no_gc; | 16146 DisallowHeapAllocation no_gc; |
| 16147 ASSERT(!key->IsTheHole()); | 16147 ASSERT(!key->IsTheHole()); |
| 16148 Object* hash = key->GetHash(); | 16148 for (int entry = HashToEntry(hash); |
| 16149 if (hash->IsUndefined()) return kNotFound; | |
| 16150 for (int entry = HashToEntry(Smi::cast(hash)->value()); | |
| 16151 entry != kNotFound; | 16149 entry != kNotFound; |
| 16152 entry = ChainAt(entry)) { | 16150 entry = ChainAt(entry)) { |
| 16153 Object* candidate = KeyAt(entry); | 16151 Object* candidate = KeyAt(entry); |
| 16154 if (candidate->SameValueZero(*key)) | 16152 if (candidate->SameValueZero(*key)) |
| 16155 return entry; | 16153 return entry; |
| 16156 } | 16154 } |
| 16157 return kNotFound; | 16155 return kNotFound; |
| 16158 } | 16156 } |
| 16159 | 16157 |
| 16160 | 16158 |
| 16161 template<class Derived, class Iterator, int entrysize> | 16159 template<class Derived, class Iterator, int entrysize> |
| 16160 int OrderedHashTable<Derived, Iterator, entrysize>::FindEntry( |
| 16161 Handle<Object> key) { |
| 16162 DisallowHeapAllocation no_gc; |
| 16163 Object* hash = key->GetHash(); |
| 16164 if (!hash->IsSmi()) return kNotFound; |
| 16165 return FindEntry(key, Smi::cast(hash)->value()); |
| 16166 } |
| 16167 |
| 16168 |
| 16169 template<class Derived, class Iterator, int entrysize> |
| 16162 int OrderedHashTable<Derived, Iterator, entrysize>::AddEntry(int hash) { | 16170 int OrderedHashTable<Derived, Iterator, entrysize>::AddEntry(int hash) { |
| 16163 ASSERT(!IsObsolete()); | 16171 ASSERT(!IsObsolete()); |
| 16164 | 16172 |
| 16165 int entry = UsedCapacity(); | 16173 int entry = UsedCapacity(); |
| 16166 int bucket = HashToBucket(hash); | 16174 int bucket = HashToBucket(hash); |
| 16167 int index = EntryToIndex(entry); | 16175 int index = EntryToIndex(entry); |
| 16168 Object* chain_entry = get(kHashTableStartIndex + bucket); | 16176 Object* chain_entry = get(kHashTableStartIndex + bucket); |
| 16169 set(kHashTableStartIndex + bucket, Smi::FromInt(entry)); | 16177 set(kHashTableStartIndex + bucket, Smi::FromInt(entry)); |
| 16170 set(index + kChainOffset, chain_entry); | 16178 set(index + kChainOffset, chain_entry); |
| 16171 SetNumberOfElements(NumberOfElements() + 1); | 16179 SetNumberOfElements(NumberOfElements() + 1); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 16201 template Handle<OrderedHashSet> | 16209 template Handle<OrderedHashSet> |
| 16202 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::Clear( | 16210 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::Clear( |
| 16203 Handle<OrderedHashSet> table); | 16211 Handle<OrderedHashSet> table); |
| 16204 | 16212 |
| 16205 template Handle<OrderedHashSet> | 16213 template Handle<OrderedHashSet> |
| 16206 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::Remove( | 16214 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::Remove( |
| 16207 Handle<OrderedHashSet> table, Handle<Object> key, bool* was_present); | 16215 Handle<OrderedHashSet> table, Handle<Object> key, bool* was_present); |
| 16208 | 16216 |
| 16209 template int | 16217 template int |
| 16210 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::FindEntry( | 16218 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::FindEntry( |
| 16219 Handle<Object> key, int hash); |
| 16220 template int |
| 16221 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::FindEntry( |
| 16211 Handle<Object> key); | 16222 Handle<Object> key); |
| 16212 | 16223 |
| 16213 template int | 16224 template int |
| 16214 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::AddEntry(int hash); | 16225 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::AddEntry(int hash); |
| 16215 | 16226 |
| 16216 template void | 16227 template void |
| 16217 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::RemoveEntry(int entry); | 16228 OrderedHashTable<OrderedHashSet, JSSetIterator, 1>::RemoveEntry(int entry); |
| 16218 | 16229 |
| 16219 | 16230 |
| 16220 template Handle<OrderedHashMap> | 16231 template Handle<OrderedHashMap> |
| (...skipping 11 matching lines...) Expand all Loading... |
| 16232 template Handle<OrderedHashMap> | 16243 template Handle<OrderedHashMap> |
| 16233 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::Clear( | 16244 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::Clear( |
| 16234 Handle<OrderedHashMap> table); | 16245 Handle<OrderedHashMap> table); |
| 16235 | 16246 |
| 16236 template Handle<OrderedHashMap> | 16247 template Handle<OrderedHashMap> |
| 16237 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::Remove( | 16248 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::Remove( |
| 16238 Handle<OrderedHashMap> table, Handle<Object> key, bool* was_present); | 16249 Handle<OrderedHashMap> table, Handle<Object> key, bool* was_present); |
| 16239 | 16250 |
| 16240 template int | 16251 template int |
| 16241 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::FindEntry( | 16252 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::FindEntry( |
| 16253 Handle<Object> key, int hash); |
| 16254 template int |
| 16255 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::FindEntry( |
| 16242 Handle<Object> key); | 16256 Handle<Object> key); |
| 16243 | 16257 |
| 16244 template int | 16258 template int |
| 16245 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::AddEntry(int hash); | 16259 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::AddEntry(int hash); |
| 16246 | 16260 |
| 16247 template void | 16261 template void |
| 16248 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::RemoveEntry(int entry); | 16262 OrderedHashTable<OrderedHashMap, JSMapIterator, 2>::RemoveEntry(int entry); |
| 16249 | 16263 |
| 16250 | 16264 |
| 16251 bool OrderedHashSet::Contains(Handle<Object> key) { | 16265 bool OrderedHashSet::Contains(Handle<Object> key) { |
| 16252 return FindEntry(key) != kNotFound; | 16266 return FindEntry(key) != kNotFound; |
| 16253 } | 16267 } |
| 16254 | 16268 |
| 16255 | 16269 |
| 16256 Handle<OrderedHashSet> OrderedHashSet::Add(Handle<OrderedHashSet> table, | 16270 Handle<OrderedHashSet> OrderedHashSet::Add(Handle<OrderedHashSet> table, |
| 16257 Handle<Object> key) { | 16271 Handle<Object> key) { |
| 16258 if (table->FindEntry(key) != kNotFound) return table; | 16272 int hash = GetOrCreateHash(table->GetIsolate(), key)->value(); |
| 16273 if (table->FindEntry(key, hash) != kNotFound) return table; |
| 16259 | 16274 |
| 16260 table = EnsureGrowable(table); | 16275 table = EnsureGrowable(table); |
| 16261 | 16276 |
| 16262 Handle<Smi> hash = GetOrCreateHash(table->GetIsolate(), key); | 16277 int index = table->AddEntry(hash); |
| 16263 int index = table->AddEntry(hash->value()); | |
| 16264 table->set(index, *key); | 16278 table->set(index, *key); |
| 16265 return table; | 16279 return table; |
| 16266 } | 16280 } |
| 16267 | 16281 |
| 16268 | 16282 |
| 16269 Object* OrderedHashMap::Lookup(Handle<Object> key) { | 16283 Object* OrderedHashMap::Lookup(Handle<Object> key) { |
| 16270 DisallowHeapAllocation no_gc; | 16284 DisallowHeapAllocation no_gc; |
| 16271 int entry = FindEntry(key); | 16285 int entry = FindEntry(key); |
| 16272 if (entry == kNotFound) return GetHeap()->the_hole_value(); | 16286 if (entry == kNotFound) return GetHeap()->the_hole_value(); |
| 16273 return ValueAt(entry); | 16287 return ValueAt(entry); |
| 16274 } | 16288 } |
| 16275 | 16289 |
| 16276 | 16290 |
| 16277 Handle<OrderedHashMap> OrderedHashMap::Put(Handle<OrderedHashMap> table, | 16291 Handle<OrderedHashMap> OrderedHashMap::Put(Handle<OrderedHashMap> table, |
| 16278 Handle<Object> key, | 16292 Handle<Object> key, |
| 16279 Handle<Object> value) { | 16293 Handle<Object> value) { |
| 16280 ASSERT(!key->IsTheHole()); | 16294 ASSERT(!key->IsTheHole()); |
| 16281 | 16295 |
| 16282 int entry = table->FindEntry(key); | 16296 int hash = GetOrCreateHash(table->GetIsolate(), key)->value(); |
| 16297 int entry = table->FindEntry(key, hash); |
| 16283 | 16298 |
| 16284 if (entry != kNotFound) { | 16299 if (entry != kNotFound) { |
| 16285 table->set(table->EntryToIndex(entry) + kValueOffset, *value); | 16300 table->set(table->EntryToIndex(entry) + kValueOffset, *value); |
| 16286 return table; | 16301 return table; |
| 16287 } | 16302 } |
| 16288 | 16303 |
| 16289 table = EnsureGrowable(table); | 16304 table = EnsureGrowable(table); |
| 16290 | 16305 |
| 16291 Handle<Smi> hash = GetOrCreateHash(table->GetIsolate(), key); | 16306 int index = table->AddEntry(hash); |
| 16292 int index = table->AddEntry(hash->value()); | |
| 16293 table->set(index, *key); | 16307 table->set(index, *key); |
| 16294 table->set(index + kValueOffset, *value); | 16308 table->set(index + kValueOffset, *value); |
| 16295 return table; | 16309 return table; |
| 16296 } | 16310 } |
| 16297 | 16311 |
| 16298 | 16312 |
| 16299 template<class Derived, class TableType> | 16313 template<class Derived, class TableType> |
| 16300 void OrderedHashTableIterator<Derived, TableType>::Transition() { | 16314 void OrderedHashTableIterator<Derived, TableType>::Transition() { |
| 16301 DisallowHeapAllocation no_allocation; | 16315 DisallowHeapAllocation no_allocation; |
| 16302 TableType* table = TableType::cast(this->table()); | 16316 TableType* table = TableType::cast(this->table()); |
| (...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16986 #define ERROR_MESSAGES_TEXTS(C, T) T, | 17000 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 16987 static const char* error_messages_[] = { | 17001 static const char* error_messages_[] = { |
| 16988 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 17002 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 16989 }; | 17003 }; |
| 16990 #undef ERROR_MESSAGES_TEXTS | 17004 #undef ERROR_MESSAGES_TEXTS |
| 16991 return error_messages_[reason]; | 17005 return error_messages_[reason]; |
| 16992 } | 17006 } |
| 16993 | 17007 |
| 16994 | 17008 |
| 16995 } } // namespace v8::internal | 17009 } } // namespace v8::internal |
| OLD | NEW |