Index: src/heap.h |
=================================================================== |
--- src/heap.h (revision 2194) |
+++ src/heap.h (working copy) |
@@ -126,7 +126,6 @@ |
V(FixedArray, number_string_cache) \ |
V(FixedArray, single_character_string_cache) \ |
V(FixedArray, natives_source_cache) \ |
- V(Object, keyed_lookup_cache) \ |
V(Object, last_script_id) |
@@ -700,11 +699,6 @@ |
non_monomorphic_cache_ = value; |
} |
- // Gets, sets and clears the lookup cache used for keyed access. |
- static inline Object* GetKeyedLookupCache(); |
- static inline void SetKeyedLookupCache(LookupCache* cache); |
- static inline void ClearKeyedLookupCache(); |
- |
// Update the next script id. |
static inline void SetLastScriptId(Object* last_script_id); |
@@ -1140,6 +1134,30 @@ |
}; |
+// Cache for mapping (map, property name) into field offset. |
+// Cleared at startup and prior to mark sweep collection. |
+class KeyedLookupCache { |
+ public: |
+ // Lookup field offset for (map, name). If absent, -1 is returned. |
+ static int Lookup(Map* map, String* name); |
+ |
+ // Update an element in the cache. |
+ static void Update(Map* map, String* name, int field_offset); |
+ |
+ // Clear the cache. |
+ static void Clear(); |
+ private: |
+ inline static int Hash(Map* map, String* name); |
+ static const int kLength = 128; |
+ struct Key { |
+ Map* map; |
+ String* name; |
+ }; |
+ static Key keys_[kLength]; |
+ static int field_offsets_[kLength]; |
+}; |
+ |
+ |
// ---------------------------------------------------------------------------- |
// Marking stack for tracing live objects. |