Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index eb351ea3803d74df6427024bc8a775de4a961380..d85bf0f9e4a72956767d41cebae4cfdc04df2959 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -438,6 +438,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) \ |
@@ -734,6 +773,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 |
@@ -770,6 +849,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); |
@@ -1013,6 +1122,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) \ |
@@ -1609,6 +1720,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) |
@@ -10381,6 +10500,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. |