| 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 |