| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index 486303d48930a46ac61f6a0130b20cca11f979ba..ee0dff3d737d13a655b19680173b07832c7f6918 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -135,6 +135,37 @@ enum PropertyAttributes {
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +enum ElementsKind {
|
| + // The "fast" kind for tagged values. Must be first to make it possible
|
| + // to efficiently check maps if they have fast elements.
|
| + FAST_ELEMENTS,
|
| +
|
| + // The "fast" kind for unwrapped, non-tagged double values.
|
| + FAST_DOUBLE_ELEMENTS,
|
| +
|
| + // The "slow" kind.
|
| + DICTIONARY_ELEMENTS,
|
| + NON_STRICT_ARGUMENTS_ELEMENTS,
|
| + // The "fast" kind for external arrays
|
| + EXTERNAL_BYTE_ELEMENTS,
|
| + EXTERNAL_UNSIGNED_BYTE_ELEMENTS,
|
| + EXTERNAL_SHORT_ELEMENTS,
|
| + EXTERNAL_UNSIGNED_SHORT_ELEMENTS,
|
| + EXTERNAL_INT_ELEMENTS,
|
| + EXTERNAL_UNSIGNED_INT_ELEMENTS,
|
| + EXTERNAL_FLOAT_ELEMENTS,
|
| + EXTERNAL_DOUBLE_ELEMENTS,
|
| + EXTERNAL_PIXEL_ELEMENTS,
|
| +
|
| + // Derived constants from ElementsKind
|
| + FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_BYTE_ELEMENTS,
|
| + LAST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS,
|
| + FIRST_ELEMENTS_KIND = FAST_ELEMENTS,
|
| + LAST_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS
|
| +};
|
| +
|
| +static const int kElementsKindCount =
|
| + LAST_ELEMENTS_KIND - FIRST_ELEMENTS_KIND + 1;
|
|
|
| // PropertyDetails captures type and attributes for a property.
|
| // They are used both in property dictionaries and instance descriptors.
|
| @@ -1463,38 +1494,6 @@ class JSReceiver: public HeapObject {
|
| // caching.
|
| class JSObject: public JSReceiver {
|
| public:
|
| - enum ElementsKind {
|
| - // The "fast" kind for tagged values. Must be first to make it possible
|
| - // to efficiently check maps if they have fast elements.
|
| - FAST_ELEMENTS,
|
| -
|
| - // The "fast" kind for unwrapped, non-tagged double values.
|
| - FAST_DOUBLE_ELEMENTS,
|
| -
|
| - // The "slow" kind.
|
| - DICTIONARY_ELEMENTS,
|
| - NON_STRICT_ARGUMENTS_ELEMENTS,
|
| - // The "fast" kind for external arrays
|
| - EXTERNAL_BYTE_ELEMENTS,
|
| - EXTERNAL_UNSIGNED_BYTE_ELEMENTS,
|
| - EXTERNAL_SHORT_ELEMENTS,
|
| - EXTERNAL_UNSIGNED_SHORT_ELEMENTS,
|
| - EXTERNAL_INT_ELEMENTS,
|
| - EXTERNAL_UNSIGNED_INT_ELEMENTS,
|
| - EXTERNAL_FLOAT_ELEMENTS,
|
| - EXTERNAL_DOUBLE_ELEMENTS,
|
| - EXTERNAL_PIXEL_ELEMENTS,
|
| -
|
| - // Derived constants from ElementsKind
|
| - FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_BYTE_ELEMENTS,
|
| - LAST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS,
|
| - FIRST_ELEMENTS_KIND = FAST_ELEMENTS,
|
| - LAST_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS
|
| - };
|
| -
|
| - static const int kElementsKindCount =
|
| - LAST_ELEMENTS_KIND - FIRST_ELEMENTS_KIND + 1;
|
| -
|
| // [properties]: Backing storage for properties.
|
| // properties is a FixedArray in the fast case and a Dictionary in the
|
| // slow case.
|
| @@ -4020,37 +4019,37 @@ class Map: public HeapObject {
|
| inline void set_is_extensible(bool value);
|
| inline bool is_extensible();
|
|
|
| - inline void set_elements_kind(JSObject::ElementsKind elements_kind) {
|
| - ASSERT(elements_kind < JSObject::kElementsKindCount);
|
| - ASSERT(JSObject::kElementsKindCount <= (1 << kElementsKindBitCount));
|
| + inline void set_elements_kind(ElementsKind elements_kind) {
|
| + ASSERT(elements_kind < kElementsKindCount);
|
| + ASSERT(kElementsKindCount <= (1 << kElementsKindBitCount));
|
| set_bit_field2((bit_field2() & ~kElementsKindMask) |
|
| (elements_kind << kElementsKindShift));
|
| ASSERT(this->elements_kind() == elements_kind);
|
| }
|
|
|
| - inline JSObject::ElementsKind elements_kind() {
|
| - return static_cast<JSObject::ElementsKind>(
|
| + inline ElementsKind elements_kind() {
|
| + return static_cast<ElementsKind>(
|
| (bit_field2() & kElementsKindMask) >> kElementsKindShift);
|
| }
|
|
|
| // Tells whether the instance has fast elements.
|
| // Equivalent to instance->GetElementsKind() == FAST_ELEMENTS.
|
| inline bool has_fast_elements() {
|
| - return elements_kind() == JSObject::FAST_ELEMENTS;
|
| + return elements_kind() == FAST_ELEMENTS;
|
| }
|
|
|
| inline bool has_fast_double_elements() {
|
| - return elements_kind() == JSObject::FAST_DOUBLE_ELEMENTS;
|
| + return elements_kind() == FAST_DOUBLE_ELEMENTS;
|
| }
|
|
|
| inline bool has_external_array_elements() {
|
| - JSObject::ElementsKind kind(elements_kind());
|
| - return kind >= JSObject::FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND &&
|
| - kind <= JSObject::LAST_EXTERNAL_ARRAY_ELEMENTS_KIND;
|
| + ElementsKind kind(elements_kind());
|
| + return kind >= FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND &&
|
| + kind <= LAST_EXTERNAL_ARRAY_ELEMENTS_KIND;
|
| }
|
|
|
| inline bool has_dictionary_elements() {
|
| - return elements_kind() == JSObject::DICTIONARY_ELEMENTS;
|
| + return elements_kind() == DICTIONARY_ELEMENTS;
|
| }
|
|
|
| // Tells whether the map is attached to SharedFunctionInfo
|
| @@ -4322,7 +4321,7 @@ class Map: public HeapObject {
|
| static const int kElementsKindMask = (-1 << kElementsKindShift) &
|
| ((1 << (kElementsKindShift + kElementsKindBitCount)) - 1);
|
| static const int8_t kMaximumBitField2FastElementValue = static_cast<int8_t>(
|
| - (JSObject::FAST_ELEMENTS + 1) << Map::kElementsKindShift) - 1;
|
| + (FAST_ELEMENTS + 1) << Map::kElementsKindShift) - 1;
|
|
|
| // Bit positions for bit field 3
|
| static const int kIsShared = 0;
|
|
|