| 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:
 | 
| 
 |