| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/api.h" | 8 #include "src/api.h" |
| 9 #include "src/base/platform/platform.h" | 9 #include "src/base/platform/platform.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 | 332 |
| 333 ExternalReferenceEncoder::ExternalReferenceEncoder(Isolate* isolate) { | 333 ExternalReferenceEncoder::ExternalReferenceEncoder(Isolate* isolate) { |
| 334 map_ = isolate->external_reference_map(); | 334 map_ = isolate->external_reference_map(); |
| 335 if (map_ != NULL) return; | 335 if (map_ != NULL) return; |
| 336 map_ = new HashMap(HashMap::PointersMatch); | 336 map_ = new HashMap(HashMap::PointersMatch); |
| 337 ExternalReferenceTable* table = ExternalReferenceTable::instance(isolate); | 337 ExternalReferenceTable* table = ExternalReferenceTable::instance(isolate); |
| 338 for (int i = 0; i < table->size(); ++i) { | 338 for (int i = 0; i < table->size(); ++i) { |
| 339 Address addr = table->address(i); | 339 Address addr = table->address(i); |
| 340 if (addr == ExternalReferenceTable::NotAvailable()) continue; | 340 if (addr == ExternalReferenceTable::NotAvailable()) continue; |
| 341 // We expect no duplicate external references entries in the table. | 341 // We expect no duplicate external references entries in the table. |
| 342 DCHECK_NULL(map_->Lookup(addr, Hash(addr), false)); | 342 DCHECK_NULL(map_->Lookup(addr, Hash(addr))); |
| 343 map_->Lookup(addr, Hash(addr), true)->value = reinterpret_cast<void*>(i); | 343 map_->LookupOrInsert(addr, Hash(addr))->value = reinterpret_cast<void*>(i); |
| 344 } | 344 } |
| 345 isolate->set_external_reference_map(map_); | 345 isolate->set_external_reference_map(map_); |
| 346 } | 346 } |
| 347 | 347 |
| 348 | 348 |
| 349 uint32_t ExternalReferenceEncoder::Encode(Address address) const { | 349 uint32_t ExternalReferenceEncoder::Encode(Address address) const { |
| 350 DCHECK_NOT_NULL(address); | 350 DCHECK_NOT_NULL(address); |
| 351 HashMap::Entry* entry = | 351 HashMap::Entry* entry = |
| 352 const_cast<HashMap*>(map_)->Lookup(address, Hash(address), false); | 352 const_cast<HashMap*>(map_)->Lookup(address, Hash(address)); |
| 353 DCHECK_NOT_NULL(entry); | 353 DCHECK_NOT_NULL(entry); |
| 354 return static_cast<uint32_t>(reinterpret_cast<intptr_t>(entry->value)); | 354 return static_cast<uint32_t>(reinterpret_cast<intptr_t>(entry->value)); |
| 355 } | 355 } |
| 356 | 356 |
| 357 | 357 |
| 358 const char* ExternalReferenceEncoder::NameOfAddress(Isolate* isolate, | 358 const char* ExternalReferenceEncoder::NameOfAddress(Isolate* isolate, |
| 359 Address address) const { | 359 Address address) const { |
| 360 HashMap::Entry* entry = | 360 HashMap::Entry* entry = |
| 361 const_cast<HashMap*>(map_)->Lookup(address, Hash(address), false); | 361 const_cast<HashMap*>(map_)->Lookup(address, Hash(address)); |
| 362 if (entry == NULL) return "<unknown>"; | 362 if (entry == NULL) return "<unknown>"; |
| 363 uint32_t i = static_cast<uint32_t>(reinterpret_cast<intptr_t>(entry->value)); | 363 uint32_t i = static_cast<uint32_t>(reinterpret_cast<intptr_t>(entry->value)); |
| 364 return ExternalReferenceTable::instance(isolate)->name(i); | 364 return ExternalReferenceTable::instance(isolate)->name(i); |
| 365 } | 365 } |
| 366 | 366 |
| 367 | 367 |
| 368 RootIndexMap::RootIndexMap(Isolate* isolate) { | 368 RootIndexMap::RootIndexMap(Isolate* isolate) { |
| 369 map_ = isolate->root_index_map(); | 369 map_ = isolate->root_index_map(); |
| 370 if (map_ != NULL) return; | 370 if (map_ != NULL) return; |
| 371 map_ = new HashMap(HashMap::PointersMatch); | 371 map_ = new HashMap(HashMap::PointersMatch); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 for (int i = 0; i < name_size; ++i) { | 465 for (int i = 0; i < name_size; ++i) { |
| 466 char c = name[i]; | 466 char c = name[i]; |
| 467 if (c == '\0') c = ' '; | 467 if (c == '\0') c = ' '; |
| 468 result[i] = c; | 468 result[i] = c; |
| 469 } | 469 } |
| 470 result[name_size] = '\0'; | 470 result[name_size] = '\0'; |
| 471 return result; | 471 return result; |
| 472 } | 472 } |
| 473 | 473 |
| 474 HashMap::Entry* FindOrCreateEntry(Address code_address) { | 474 HashMap::Entry* FindOrCreateEntry(Address code_address) { |
| 475 return impl_.Lookup(code_address, ComputePointerHash(code_address), true); | 475 return impl_.LookupOrInsert(code_address, |
| 476 ComputePointerHash(code_address)); |
| 476 } | 477 } |
| 477 | 478 |
| 478 HashMap::Entry* FindEntry(Address code_address) { | 479 HashMap::Entry* FindEntry(Address code_address) { |
| 479 return impl_.Lookup(code_address, | 480 return impl_.Lookup(code_address, ComputePointerHash(code_address)); |
| 480 ComputePointerHash(code_address), | |
| 481 false); | |
| 482 } | 481 } |
| 483 | 482 |
| 484 void RemoveEntry(HashMap::Entry* entry) { | 483 void RemoveEntry(HashMap::Entry* entry) { |
| 485 impl_.Remove(entry->key, entry->hash); | 484 impl_.Remove(entry->key, entry->hash); |
| 486 } | 485 } |
| 487 | 486 |
| 488 HashMap impl_; | 487 HashMap impl_; |
| 489 | 488 |
| 490 DISALLOW_COPY_AND_ASSIGN(NameMap); | 489 DISALLOW_COPY_AND_ASSIGN(NameMap); |
| 491 }; | 490 }; |
| (...skipping 2031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2523 DisallowHeapAllocation no_gc; | 2522 DisallowHeapAllocation no_gc; |
| 2524 SerializedCodeData* scd = new SerializedCodeData(cached_data); | 2523 SerializedCodeData* scd = new SerializedCodeData(cached_data); |
| 2525 SanityCheckResult r = scd->SanityCheck(isolate, source); | 2524 SanityCheckResult r = scd->SanityCheck(isolate, source); |
| 2526 if (r == CHECK_SUCCESS) return scd; | 2525 if (r == CHECK_SUCCESS) return scd; |
| 2527 cached_data->Reject(); | 2526 cached_data->Reject(); |
| 2528 source->GetIsolate()->counters()->code_cache_reject_reason()->AddSample(r); | 2527 source->GetIsolate()->counters()->code_cache_reject_reason()->AddSample(r); |
| 2529 delete scd; | 2528 delete scd; |
| 2530 return NULL; | 2529 return NULL; |
| 2531 } | 2530 } |
| 2532 } } // namespace v8::internal | 2531 } } // namespace v8::internal |
| OLD | NEW |