Index: src/objects.h |
=================================================================== |
--- src/objects.h (revision 5318) |
+++ src/objects.h (working copy) |
@@ -638,6 +638,7 @@ |
inline bool IsDictionary(); |
inline bool IsSymbolTable(); |
inline bool IsJSFunctionResultCache(); |
+ inline bool IsNormalizedMapCache(); |
inline bool IsCompilationCacheTable(); |
inline bool IsCodeCacheHashTable(); |
inline bool IsMapCache(); |
@@ -1551,6 +1552,8 @@ |
int expected_additional_properties); |
Object* NormalizeElements(); |
+ Object* UpdateMapCodeCache(String* name, Code* code); |
+ |
// Transform slow named properties to fast variants. |
// Returns failure if allocation failed. |
Object* TransformToFastProperties(int unused_property_fields); |
@@ -2465,6 +2468,35 @@ |
}; |
+// The cache for maps used by normalized (dictionary mode) objects. |
+// Such maps do not have property descriptors, so a typical program |
+// needs very limited number of distinct normalized maps. |
+class NormalizedMapCache: public FixedArray { |
+ public: |
+ static const int kEntries = 64; |
+ |
+ static bool IsCacheable(JSObject* object); |
+ |
+ Object* Get(JSObject* object, PropertyNormalizationMode mode); |
+ |
+ bool Contains(Map* map); |
+ |
+ void Clear(); |
+ |
+ // Casting |
+ static inline NormalizedMapCache* cast(Object* obj); |
+ |
+#ifdef DEBUG |
+ void NormalizedMapCacheVerify(); |
+#endif |
+ |
+ private: |
+ static int Hash(Map* fast); |
+ |
+ static bool CheckHit(Map* slow, Map* fast, PropertyNormalizationMode mode); |
+}; |
+ |
+ |
// ByteArray represents fixed sized byte arrays. Used by the outside world, |
// such as PCRE, and also by the memory allocator and garbage collector to |
// fill in free blocks in the heap. |
@@ -3123,6 +3155,8 @@ |
Object* CopyDropDescriptors(); |
+ Object* CopyNormalized(PropertyNormalizationMode mode); |
+ |
// Returns a copy of the map, with all transitions dropped from the |
// instance descriptors. |
Object* CopyDropTransitions(); |
@@ -3185,6 +3219,7 @@ |
#ifdef DEBUG |
void MapPrint(); |
void MapVerify(); |
+ void NormalizedMapVerify(); |
#endif |
inline int visitor_id(); |
@@ -3219,6 +3254,8 @@ |
static const int kPreAllocatedPropertyFieldsOffset = |
kInstanceSizesOffset + kPreAllocatedPropertyFieldsByte; |
// The byte at position 3 is not in use at the moment. |
+ static const int kUnusedByte = 3; |
+ static const int kUnusedOffset = kInstanceSizesOffset + kUnusedByte; |
// Byte offsets within kInstanceAttributesOffset attributes. |
static const int kInstanceTypeOffset = kInstanceAttributesOffset + 0; |