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_H_ | 5 #ifndef V8_HEAP_HEAP_H_ |
6 #define V8_HEAP_HEAP_H_ | 6 #define V8_HEAP_HEAP_H_ |
7 | 7 |
8 #include <cmath> | 8 #include <cmath> |
9 #include <map> | 9 #include <map> |
10 | 10 |
(...skipping 2611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2622 | 2622 |
2623 | 2623 |
2624 // Cache for mapping (map, property name) into descriptor index. | 2624 // Cache for mapping (map, property name) into descriptor index. |
2625 // The cache contains both positive and negative results. | 2625 // The cache contains both positive and negative results. |
2626 // Descriptor index equals kNotFound means the property is absent. | 2626 // Descriptor index equals kNotFound means the property is absent. |
2627 // Cleared at startup and prior to any gc. | 2627 // Cleared at startup and prior to any gc. |
2628 class DescriptorLookupCache { | 2628 class DescriptorLookupCache { |
2629 public: | 2629 public: |
2630 // Lookup descriptor index for (map, name). | 2630 // Lookup descriptor index for (map, name). |
2631 // If absent, kAbsent is returned. | 2631 // If absent, kAbsent is returned. |
2632 int Lookup(Map* source, Name* name) { | 2632 inline int Lookup(Map* source, Name* name); |
2633 if (!name->IsUniqueName()) return kAbsent; | |
2634 int index = Hash(source, name); | |
2635 Key& key = keys_[index]; | |
2636 if ((key.source == source) && (key.name == name)) return results_[index]; | |
2637 return kAbsent; | |
2638 } | |
2639 | 2633 |
2640 // Update an element in the cache. | 2634 // Update an element in the cache. |
2641 void Update(Map* source, Name* name, int result) { | 2635 inline void Update(Map* source, Name* name, int result); |
2642 DCHECK(result != kAbsent); | |
2643 if (name->IsUniqueName()) { | |
2644 int index = Hash(source, name); | |
2645 Key& key = keys_[index]; | |
2646 key.source = source; | |
2647 key.name = name; | |
2648 results_[index] = result; | |
2649 } | |
2650 } | |
2651 | 2636 |
2652 // Clear the cache. | 2637 // Clear the cache. |
2653 void Clear(); | 2638 void Clear(); |
2654 | 2639 |
2655 static const int kAbsent = -2; | 2640 static const int kAbsent = -2; |
2656 | 2641 |
2657 private: | 2642 private: |
2658 DescriptorLookupCache() { | 2643 DescriptorLookupCache() { |
2659 for (int i = 0; i < kLength; ++i) { | 2644 for (int i = 0; i < kLength; ++i) { |
2660 keys_[i].source = NULL; | 2645 keys_[i].source = NULL; |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2778 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. | 2763 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. |
2779 | 2764 |
2780 private: | 2765 private: |
2781 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); | 2766 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); |
2782 }; | 2767 }; |
2783 #endif // DEBUG | 2768 #endif // DEBUG |
2784 } | 2769 } |
2785 } // namespace v8::internal | 2770 } // namespace v8::internal |
2786 | 2771 |
2787 #endif // V8_HEAP_HEAP_H_ | 2772 #endif // V8_HEAP_HEAP_H_ |
OLD | NEW |