Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 0c146656aa4d4ddc7ac003e2fea855cae6ad370b..0ad6f14cde1c4af02bebd0d51346bd3373566eec 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -1191,6 +1191,7 @@ class JSObject: public HeapObject { |
// case, and a PixelArray or ExternalArray in special cases. |
DECL_ACCESSORS(elements, HeapObject) |
inline void initialize_elements(); |
+ inline Object* ResetElements(); |
inline ElementsKind GetElementsKind(); |
inline bool HasFastElements(); |
inline bool HasDictionaryElements(); |
@@ -1367,7 +1368,7 @@ class JSObject: public HeapObject { |
// The undefined object if index is out of bounds. |
Object* GetElementWithReceiver(JSObject* receiver, uint32_t index); |
- void SetFastElements(FixedArray* elements); |
+ Object* SetFastElementsCapacityAndLength(int capacity, int length); |
Object* SetSlowElements(Object* length); |
// Lookup interceptors are used for handling properties controlled by host |
@@ -2987,6 +2988,19 @@ class Map: public HeapObject { |
return ((1 << kIsExtensible) & bit_field2()) != 0; |
} |
+ // Tells whether the instance has fast elements. |
+ void set_has_fast_elements(bool value) { |
+ if (value) { |
+ set_bit_field2(bit_field2() | (1 << kHasFastElements)); |
+ } else { |
+ set_bit_field2(bit_field2() & ~(1 << kHasFastElements)); |
+ } |
+ } |
+ |
+ bool has_fast_elements() { |
+ return ((1 << kHasFastElements) & bit_field2()) != 0; |
+ } |
+ |
// Tells whether the instance needs security checks when accessing its |
// properties. |
inline void set_is_access_check_needed(bool access_check_needed); |
@@ -3010,6 +3024,16 @@ class Map: public HeapObject { |
// instance descriptors. |
Object* CopyDropTransitions(); |
+ // Returns this map if it has the fast elements bit set, otherwise |
+ // returns a copy of the map, with all transitions dropped from the |
+ // descriptors and the fast elements bit set. |
+ inline Object* GetFastElementsMap(); |
+ |
+ // Returns this map if it has the fast elements bit cleared, |
+ // otherwise returns a copy of the map, with all transitions dropped |
+ // from the descriptors and the fast elements bit cleared. |
+ inline Object* GetSlowElementsMap(); |
+ |
// Returns the property index for name (only valid for FAST MODE). |
int PropertyIndexFor(String* name); |
@@ -3111,6 +3135,7 @@ class Map: public HeapObject { |
// Bit positions for bit field 2 |
static const int kIsExtensible = 0; |
static const int kFunctionWithPrototype = 1; |
+ static const int kHasFastElements = 2; |
// Layout of the default cache. It holds alternating name and code objects. |
static const int kCodeCacheEntrySize = 2; |