| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index d2f6d3559bf99d37b31b448a1e777a76d933002b..891aeaa3abd3ecebed3bbe7364c564293a70c011 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -1211,7 +1211,9 @@ class JSObject: public HeapObject {
|
| public:
|
| enum DeleteMode { NORMAL_DELETION, FORCE_DELETION };
|
| enum ElementsKind {
|
| + // The only "fast" kind.
|
| FAST_ELEMENTS,
|
| + // All the kinds below are "slow".
|
| DICTIONARY_ELEMENTS,
|
| PIXEL_ELEMENTS,
|
| EXTERNAL_BYTE_ELEMENTS,
|
| @@ -1232,8 +1234,21 @@ class JSObject: public HeapObject {
|
| inline StringDictionary* property_dictionary(); // Gets slow properties.
|
|
|
| // [elements]: The elements (properties with names that are integers).
|
| - // elements is a FixedArray in the fast case, a Dictionary in the slow
|
| - // case, and a PixelArray or ExternalArray in special cases.
|
| + //
|
| + // Elements can be in two general modes: fast and slow. Each mode
|
| + // corrensponds to a set of object representations of elements that
|
| + // have something in common.
|
| + //
|
| + // In the fast mode elements is a FixedArray and so each element can
|
| + // be quickly accessed. This fact is used in the generated code. The
|
| + // elements array can have one of the two maps in this mode:
|
| + // fixed_array_map or fixed_cow_array_map (for copy-on-write
|
| + // arrays). In the latter case the elements array may be shared by a
|
| + // few objects and so before writing to any element the array must
|
| + // be copied. Use EnsureWritableFastElements in this case.
|
| + //
|
| + // In the slow mode elements is either a NumberDictionary or a
|
| + // PixelArray or an ExternalArray.
|
| DECL_ACCESSORS(elements, HeapObject)
|
| inline void initialize_elements();
|
| inline Object* ResetElements();
|
| @@ -1251,6 +1266,8 @@ class JSObject: public HeapObject {
|
| inline bool HasExternalFloatElements();
|
| inline bool AllowsSetElementsLength();
|
| inline NumberDictionary* element_dictionary(); // Gets slow elements.
|
| + // Requires: this->HasFastElements().
|
| + inline Object* EnsureWritableFastElements();
|
|
|
| // Collects elements starting at index 0.
|
| // Undefined values are placed after non-undefined values.
|
| @@ -1703,6 +1720,10 @@ class FixedArray: public HeapObject {
|
| inline void set_null(int index);
|
| inline void set_the_hole(int index);
|
|
|
| + // Setters with less debug checks for the GC to use.
|
| + inline void set_unchecked(int index, Smi* value);
|
| + inline void set_null_unchecked(int index);
|
| +
|
| // Gives access to raw memory which stores the array's data.
|
| inline Object** data_start();
|
|
|
| @@ -3061,7 +3082,8 @@ class Map: public HeapObject {
|
| inline bool is_extensible();
|
|
|
| // Tells whether the instance has fast elements.
|
| - void set_has_fast_elements(bool value) {
|
| + // Equivalent to instance->GetElementsKind() == FAST_ELEMENTS.
|
| + inline void set_has_fast_elements(bool value) {
|
| if (value) {
|
| set_bit_field2(bit_field2() | (1 << kHasFastElements));
|
| } else {
|
| @@ -3069,7 +3091,7 @@ class Map: public HeapObject {
|
| }
|
| }
|
|
|
| - bool has_fast_elements() {
|
| + inline bool has_fast_elements() {
|
| return ((1 << kHasFastElements) & bit_field2()) != 0;
|
| }
|
|
|
|
|