Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(274)

Unified Diff: src/objects.h

Issue 2405253006: [builtins] implement Array.prototype[@@iterator] in TFJ builtins (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698