| 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 #ifndef V8_HEAP_HEAP_INL_H_ | 5 #ifndef V8_HEAP_HEAP_INL_H_ |
| 6 #define V8_HEAP_HEAP_INL_H_ | 6 #define V8_HEAP_HEAP_INL_H_ |
| 7 | 7 |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 | 9 |
| 10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
| (...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 | 615 |
| 616 void Heap::ExternalStringTable::ShrinkNewStrings(int position) { | 616 void Heap::ExternalStringTable::ShrinkNewStrings(int position) { |
| 617 new_space_strings_.Rewind(position); | 617 new_space_strings_.Rewind(position); |
| 618 #ifdef VERIFY_HEAP | 618 #ifdef VERIFY_HEAP |
| 619 if (FLAG_verify_heap) { | 619 if (FLAG_verify_heap) { |
| 620 Verify(); | 620 Verify(); |
| 621 } | 621 } |
| 622 #endif | 622 #endif |
| 623 } | 623 } |
| 624 | 624 |
| 625 // static |
| 626 int DescriptorLookupCache::Hash(Object* source, Name* name) { |
| 627 DCHECK(name->IsUniqueName()); |
| 628 // Uses only lower 32 bits if pointers are larger. |
| 629 uint32_t source_hash = |
| 630 static_cast<uint32_t>(reinterpret_cast<uintptr_t>(source)) >> |
| 631 kPointerSizeLog2; |
| 632 uint32_t name_hash = name->hash_field(); |
| 633 return (source_hash ^ name_hash) % kLength; |
| 634 } |
| 625 | 635 |
| 626 int DescriptorLookupCache::Lookup(Map* source, Name* name) { | 636 int DescriptorLookupCache::Lookup(Map* source, Name* name) { |
| 627 if (!name->IsUniqueName()) return kAbsent; | |
| 628 int index = Hash(source, name); | 637 int index = Hash(source, name); |
| 629 Key& key = keys_[index]; | 638 Key& key = keys_[index]; |
| 630 if ((key.source == source) && (key.name == name)) return results_[index]; | 639 if ((key.source == source) && (key.name == name)) return results_[index]; |
| 631 return kAbsent; | 640 return kAbsent; |
| 632 } | 641 } |
| 633 | 642 |
| 634 | 643 |
| 635 void DescriptorLookupCache::Update(Map* source, Name* name, int result) { | 644 void DescriptorLookupCache::Update(Map* source, Name* name, int result) { |
| 636 DCHECK(result != kAbsent); | 645 DCHECK(result != kAbsent); |
| 637 if (name->IsUniqueName()) { | 646 int index = Hash(source, name); |
| 638 int index = Hash(source, name); | 647 Key& key = keys_[index]; |
| 639 Key& key = keys_[index]; | 648 key.source = source; |
| 640 key.source = source; | 649 key.name = name; |
| 641 key.name = name; | 650 results_[index] = result; |
| 642 results_[index] = result; | |
| 643 } | |
| 644 } | 651 } |
| 645 | 652 |
| 646 | 653 |
| 647 void Heap::ClearInstanceofCache() { | 654 void Heap::ClearInstanceofCache() { |
| 648 set_instanceof_cache_function(Smi::FromInt(0)); | 655 set_instanceof_cache_function(Smi::FromInt(0)); |
| 649 } | 656 } |
| 650 | 657 |
| 651 | 658 |
| 652 Object* Heap::ToBoolean(bool condition) { | 659 Object* Heap::ToBoolean(bool condition) { |
| 653 return condition ? true_value() : false_value(); | 660 return condition ? true_value() : false_value(); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 | 734 |
| 728 void VerifySmisVisitor::VisitPointers(Object** start, Object** end) { | 735 void VerifySmisVisitor::VisitPointers(Object** start, Object** end) { |
| 729 for (Object** current = start; current < end; current++) { | 736 for (Object** current = start; current < end; current++) { |
| 730 CHECK((*current)->IsSmi()); | 737 CHECK((*current)->IsSmi()); |
| 731 } | 738 } |
| 732 } | 739 } |
| 733 } // namespace internal | 740 } // namespace internal |
| 734 } // namespace v8 | 741 } // namespace v8 |
| 735 | 742 |
| 736 #endif // V8_HEAP_HEAP_INL_H_ | 743 #endif // V8_HEAP_HEAP_INL_H_ |
| OLD | NEW |