Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index aa8c9693442877c18b848d54e8e1e2ab3148ecc8..5534ae3077e69b81585a5a63d61889919d5dbb11 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -444,6 +444,45 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1; |
V(JS_ERROR_TYPE) \ |
V(JS_STRING_ITERATOR_TYPE) \ |
\ |
+ V(JS_TYPED_ARRAY_KEY_ITERATOR_TYPE) \ |
+ V(JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE) \ |
+ \ |
+ V(JS_INT8_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_UINT8_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_INT16_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_UINT16_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_INT32_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_UINT32_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FLOAT32_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FLOAT64_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_UINT8_CLAMPED_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ \ |
+ V(JS_FAST_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_HOLEY_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_HOLEY_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_HOLEY_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_GENERIC_ARRAY_KEY_VALUE_ITERATOR_TYPE) \ |
+ \ |
+ V(JS_INT8_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_UINT8_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_INT16_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_UINT16_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_INT32_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_UINT32_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FLOAT32_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FLOAT64_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_UINT8_CLAMPED_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ \ |
+ V(JS_FAST_SMI_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_HOLEY_SMI_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_HOLEY_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_DOUBLE_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_FAST_HOLEY_DOUBLE_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ V(JS_GENERIC_ARRAY_VALUE_ITERATOR_TYPE) \ |
+ \ |
V(JS_BOUND_FUNCTION_TYPE) \ |
V(JS_FUNCTION_TYPE) \ |
V(DEBUG_INFO_TYPE) \ |
@@ -747,6 +786,46 @@ enum InstanceType { |
JS_REGEXP_TYPE, |
JS_ERROR_TYPE, |
JS_STRING_ITERATOR_TYPE, |
+ |
+ JS_TYPED_ARRAY_KEY_ITERATOR_TYPE, |
+ JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE, |
+ |
+ JS_UINT8_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_INT8_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_UINT16_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_INT16_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_UINT32_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_INT32_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_FLOAT32_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_FLOAT64_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_UINT8_CLAMPED_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ |
+ JS_FAST_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_HOLEY_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_HOLEY_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_HOLEY_DOUBLE_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ JS_GENERIC_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ |
+ JS_UINT8_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_INT8_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_UINT16_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_INT16_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_UINT32_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_INT32_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_FLOAT32_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_FLOAT64_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_UINT8_CLAMPED_ARRAY_VALUE_ITERATOR_TYPE, |
+ |
+ JS_FAST_SMI_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_HOLEY_SMI_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_HOLEY_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_DOUBLE_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_FAST_HOLEY_DOUBLE_ARRAY_VALUE_ITERATOR_TYPE, |
+ JS_GENERIC_ARRAY_VALUE_ITERATOR_TYPE, |
+ |
JS_BOUND_FUNCTION_TYPE, |
JS_FUNCTION_TYPE, // LAST_JS_OBJECT_TYPE, LAST_JS_RECEIVER_TYPE |
@@ -783,6 +862,36 @@ enum InstanceType { |
// an empty fixed array as elements backing store. This is true for string |
// wrappers. |
LAST_CUSTOM_ELEMENTS_RECEIVER = JS_VALUE_TYPE, |
+ |
+ FIRST_JS_TYPED_ARRAY_KEY_ITERATOR_TYPE = JS_TYPED_ARRAY_KEY_ITERATOR_TYPE, |
+ LAST_JS_TYPED_ARRAY_KEY_ITERATOR_TYPE = JS_TYPED_ARRAY_KEY_ITERATOR_TYPE, |
+ FIRST_JS_ARRAY_KEY_ITERATOR_TYPE = JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE, |
+ LAST_JS_ARRAY_KEY_ITERATOR_TYPE = JS_GENERIC_ARRAY_KEY_ITERATOR_TYPE, |
+ FIRST_ARRAY_KEY_ITERATOR_TYPE = FIRST_JS_TYPED_ARRAY_KEY_ITERATOR_TYPE, |
+ LAST_ARRAY_KEY_ITERATOR_TYPE = LAST_JS_ARRAY_KEY_ITERATOR_TYPE, |
+ |
+ FIRST_JS_TYPED_ARRAY_KEY_VALUE_ITERATOR_TYPE = |
+ JS_UINT8_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ LAST_JS_TYPED_ARRAY_KEY_VALUE_ITERATOR_TYPE = |
+ JS_UINT8_CLAMPED_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ FIRST_JS_ARRAY_KEY_VALUE_ITERATOR_TYPE = |
+ JS_FAST_SMI_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ LAST_JS_ARRAY_KEY_VALUE_ITERATOR_TYPE = |
+ JS_GENERIC_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ FIRST_ARRAY_KEY_VALUE_ITERATOR_TYPE = |
+ FIRST_JS_TYPED_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ LAST_ARRAY_KEY_VALUE_ITERATOR_TYPE = LAST_JS_ARRAY_KEY_VALUE_ITERATOR_TYPE, |
+ |
+ FIRST_JS_TYPED_ARRAY_VALUE_ITERATOR_TYPE = JS_UINT8_ARRAY_VALUE_ITERATOR_TYPE, |
+ LAST_JS_TYPED_ARRAY_VALUE_ITERATOR_TYPE = |
+ JS_UINT8_CLAMPED_ARRAY_VALUE_ITERATOR_TYPE, |
+ FIRST_JS_ARRAY_VALUE_ITERATOR_TYPE = JS_FAST_SMI_ARRAY_VALUE_ITERATOR_TYPE, |
+ LAST_JS_ARRAY_VALUE_ITERATOR_TYPE = JS_GENERIC_ARRAY_VALUE_ITERATOR_TYPE, |
+ FIRST_ARRAY_VALUE_ITERATOR_TYPE = FIRST_JS_TYPED_ARRAY_VALUE_ITERATOR_TYPE, |
+ LAST_ARRAY_VALUE_ITERATOR_TYPE = LAST_JS_ARRAY_VALUE_ITERATOR_TYPE, |
+ |
+ FIRST_ARRAY_ITERATOR_TYPE = FIRST_JS_TYPED_ARRAY_KEY_ITERATOR_TYPE, |
+ LAST_ARRAY_ITERATOR_TYPE = LAST_ARRAY_VALUE_ITERATOR_TYPE, |
}; |
STATIC_ASSERT(JS_OBJECT_TYPE == Internals::kJSObjectType); |
@@ -1027,6 +1136,8 @@ template <class C> inline bool Is(Object* obj); |
V(JSArrayBufferView) \ |
V(JSCollection) \ |
V(JSTypedArray) \ |
+ V(JSArrayIterator) \ |
+ V(JSTypedArrayIterator) \ |
V(JSDataView) \ |
V(JSProxy) \ |
V(JSError) \ |
@@ -1623,6 +1734,14 @@ class HeapObject: public Object { |
HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL) |
#undef IS_TYPE_FUNCTION_DECL |
+ // Helpers |
+ INLINE(bool IsJSTypedArrayKeyIterator() const); |
+ INLINE(bool IsJSTypedArrayValueIterator() const); |
+ INLINE(bool IsJSTypedArrayKeyValueIterator() const); |
+ INLINE(bool IsJSArrayKeyIterator() const); |
+ INLINE(bool IsJSArrayValueIterator() const); |
+ INLINE(bool IsJSArrayKeyValueIterator() const); |
+ |
#define IS_TYPE_FUNCTION_DECL(Type, Value) \ |
INLINE(bool Is##Type(Isolate* isolate) const); |
ODDBALL_LIST(IS_TYPE_FUNCTION_DECL) |
@@ -10462,6 +10581,54 @@ class JSMap : public JSCollection { |
DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap); |
}; |
+class JSTypedArrayIterator : public JSObject { |
+ public: |
+ DECLARE_PRINTER(JSTypedArrayIterator) |
+ DECLARE_VERIFIER(JSTypedArrayIterator) |
+ |
+ DECLARE_CAST(JSTypedArrayIterator) |
+ |
+ // [object]: the [[IteratedObject]] internal field. |
+ DECL_ACCESSORS(object, Object) |
+ |
+ // [index]: The [[ArrayIteratorNextIndex]] internal field. Always an Smi for |
+ // TypedArrays. |
+ DECL_INT_ACCESSORS(index) |
+ |
+ static const int kIteratedObjectOffset = JSObject::kHeaderSize; |
+ static const int kNextIndexOffset = kIteratedObjectOffset + kPointerSize; |
+ static const int kSize = kNextIndexOffset + kPointerSize; |
+ |
+ private: |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArrayIterator); |
+}; |
+ |
+class JSArrayIterator : public JSObject { |
+ public: |
+ DECLARE_PRINTER(JSArrayIterator) |
+ DECLARE_VERIFIER(JSArrayIterator) |
+ |
+ DECLARE_CAST(JSArrayIterator) |
+ |
+ // [object]: the [[IteratedObject]] internal field. |
+ DECL_ACCESSORS(object, Object) |
+ |
+ // [index]: The [[ArrayIteratorNextIndex]] internal field. |
+ DECL_ACCESSORS(index, Object) |
+ |
+ // [map]: The Map of the [[IteratedObject]] field at the time the iterator is |
+ // allocated. |
+ DECL_ACCESSORS(map, Map) |
+ |
+ static const int kIteratedObjectOffset = JSObject::kHeaderSize; |
+ static const int kNextIndexOffset = kIteratedObjectOffset + kPointerSize; |
+ static const int kIteratedObjectMapOffset = kNextIndexOffset + kPointerSize; |
+ static const int kSize = kIteratedObjectMapOffset + kPointerSize; |
+ |
+ private: |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayIterator); |
+}; |
+ |
class JSStringIterator : public JSObject { |
public: |
// Dispatched behavior. |