Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 869253741702f8596dd45b59517bb816437b3414..1a80140c393a0638207dde60567403ffba8d0739 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -431,6 +431,7 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1; |
V(JS_MAP_TYPE) \ |
V(JS_SET_ITERATOR_TYPE) \ |
V(JS_MAP_ITERATOR_TYPE) \ |
+ V(JS_ITERATOR_RESULT_TYPE) \ |
V(JS_WEAK_MAP_TYPE) \ |
V(JS_WEAK_SET_TYPE) \ |
V(JS_REGEXP_TYPE) \ |
@@ -729,6 +730,7 @@ enum InstanceType { |
JS_MAP_TYPE, |
JS_SET_ITERATOR_TYPE, |
JS_MAP_ITERATOR_TYPE, |
+ JS_ITERATOR_RESULT_TYPE, |
JS_WEAK_MAP_TYPE, |
JS_WEAK_SET_TYPE, |
JS_REGEXP_TYPE, |
@@ -957,6 +959,7 @@ template <class C> inline bool Is(Object* obj); |
V(JSMap) \ |
V(JSSetIterator) \ |
V(JSMapIterator) \ |
+ V(JSIteratorResult) \ |
V(JSWeakCollection) \ |
V(JSWeakMap) \ |
V(JSWeakSet) \ |
@@ -6851,17 +6854,6 @@ class JSGeneratorObject: public JSObject { |
// Resume mode, for use by runtime functions. |
enum ResumeMode { NEXT, THROW }; |
- // Yielding from a generator returns an object with the following inobject |
- // properties. See Context::iterator_result_map() for the map. |
- static const int kResultValuePropertyIndex = 0; |
- static const int kResultDonePropertyIndex = 1; |
- static const int kResultPropertyCount = 2; |
- |
- static const int kResultValuePropertyOffset = JSObject::kHeaderSize; |
- static const int kResultDonePropertyOffset = |
- kResultValuePropertyOffset + kPointerSize; |
- static const int kResultSize = kResultDonePropertyOffset + kPointerSize; |
- |
private: |
DISALLOW_IMPLICIT_CONSTRUCTORS(JSGeneratorObject); |
}; |
@@ -9480,6 +9472,40 @@ class JSMapIterator: public OrderedHashTableIterator<JSMapIterator, |
}; |
+// ES6 section 25.1.1.3 The IteratorResult Interface |
+class JSIteratorResult final : public JSObject { |
+ public: |
+ // [done]: This is the result status of an iterator next method call. If the |
+ // end of the iterator was reached done is true. If the end was not reached |
+ // done is false and a [value] is available. |
+ DECL_ACCESSORS(done, Object) |
+ |
+ // [value]: If [done] is false, this is the current iteration element value. |
+ // If [done] is true, this is the return value of the iterator, if it supplied |
+ // one. If the iterator does not have a return value, value is undefined. |
+ // In that case, the value property may be absent from the conforming object |
+ // if it does not inherit an explicit value property. |
+ DECL_ACCESSORS(value, Object) |
+ |
+ // Dispatched behavior. |
+ DECLARE_PRINTER(JSIteratorResult) |
+ DECLARE_VERIFIER(JSIteratorResult) |
+ |
+ DECLARE_CAST(JSIteratorResult) |
+ |
+ static const int kValueOffset = JSObject::kHeaderSize; |
+ static const int kDoneOffset = kValueOffset + kPointerSize; |
+ static const int kSize = kDoneOffset + kPointerSize; |
+ |
+ // Indices of in-object properties. |
+ static const int kValueIndex = 0; |
+ static const int kDoneIndex = 1; |
+ |
+ private: |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(JSIteratorResult); |
+}; |
+ |
+ |
// Base class for both JSWeakMap and JSWeakSet |
class JSWeakCollection: public JSObject { |
public: |