| Index: src/objects.h
 | 
| diff --git a/src/objects.h b/src/objects.h
 | 
| index d870ccecb214263de479b922b6c28132ec0da57d..7d8dae78aa910de0c9561c08786abef380f1f9fc 100644
 | 
| --- a/src/objects.h
 | 
| +++ b/src/objects.h
 | 
| @@ -1348,6 +1348,16 @@ enum EnsureElementsMode {
 | 
|  };
 | 
|  
 | 
|  
 | 
| +// Indicates whether a property should be set or (re)defined.  Setting of a
 | 
| +// property causes attributes to remain unchanged, writability to be checked
 | 
| +// and callbacks to be called.  Defining of a property causes attributes to
 | 
| +// be updated and callbacks to be overridden.
 | 
| +enum SetPropertyMode {
 | 
| +  SET_PROPERTY,
 | 
| +  DEFINE_PROPERTY
 | 
| +};
 | 
| +
 | 
| +
 | 
|  // JSReceiver includes types on which properties can be defined, i.e.,
 | 
|  // JSObject and JSProxy.
 | 
|  class JSReceiver: public HeapObject {
 | 
| @@ -1386,6 +1396,7 @@ class JSReceiver: public HeapObject {
 | 
|    // Can cause GC, or return failure if GC is required.
 | 
|    MUST_USE_RESULT MaybeObject* SetElement(uint32_t index,
 | 
|                                            Object* value,
 | 
| +                                          PropertyAttributes attributes,
 | 
|                                            StrictModeFlag strict_mode,
 | 
|                                            bool check_prototype);
 | 
|  
 | 
| @@ -1739,10 +1750,13 @@ class JSObject: public JSReceiver {
 | 
|                                                StrictModeFlag strict_mode,
 | 
|                                                bool check_prototype);
 | 
|  
 | 
| -  MUST_USE_RESULT MaybeObject* SetDictionaryElement(uint32_t index,
 | 
| -                                                    Object* value,
 | 
| -                                                    StrictModeFlag strict_mode,
 | 
| -                                                    bool check_prototype);
 | 
| +  MUST_USE_RESULT MaybeObject* SetDictionaryElement(
 | 
| +      uint32_t index,
 | 
| +      Object* value,
 | 
| +      PropertyAttributes attributes,
 | 
| +      StrictModeFlag strict_mode,
 | 
| +      bool check_prototype,
 | 
| +      SetPropertyMode set_mode = SET_PROPERTY);
 | 
|  
 | 
|    MUST_USE_RESULT MaybeObject* SetFastDoubleElement(
 | 
|        uint32_t index,
 | 
| @@ -1750,23 +1764,28 @@ class JSObject: public JSReceiver {
 | 
|        StrictModeFlag strict_mode,
 | 
|        bool check_prototype = true);
 | 
|  
 | 
| -
 | 
|    static Handle<Object> SetOwnElement(Handle<JSObject> object,
 | 
|                                        uint32_t index,
 | 
|                                        Handle<Object> value,
 | 
|                                        StrictModeFlag strict_mode);
 | 
|  
 | 
|    // Empty handle is returned if the element cannot be set to the given value.
 | 
| -  static MUST_USE_RESULT Handle<Object> SetElement(Handle<JSObject> object,
 | 
| -                                                   uint32_t index,
 | 
| -                                                   Handle<Object> value,
 | 
| -                                                   StrictModeFlag strict_mode);
 | 
| +  static MUST_USE_RESULT Handle<Object> SetElement(
 | 
| +      Handle<JSObject> object,
 | 
| +      uint32_t index,
 | 
| +      Handle<Object> value,
 | 
| +      PropertyAttributes attr,
 | 
| +      StrictModeFlag strict_mode,
 | 
| +      SetPropertyMode set_mode = SET_PROPERTY);
 | 
|  
 | 
|    // A Failure object is returned if GC is needed.
 | 
| -  MUST_USE_RESULT MaybeObject* SetElement(uint32_t index,
 | 
| -                                          Object* value,
 | 
| -                                          StrictModeFlag strict_mode,
 | 
| -                                          bool check_prototype);
 | 
| +  MUST_USE_RESULT MaybeObject* SetElement(
 | 
| +      uint32_t index,
 | 
| +      Object* value,
 | 
| +      PropertyAttributes attributes,
 | 
| +      StrictModeFlag strict_mode,
 | 
| +      bool check_prototype = true,
 | 
| +      SetPropertyMode set_mode = SET_PROPERTY);
 | 
|  
 | 
|    // Returns the index'th element.
 | 
|    // The undefined object if index is out of bounds.
 | 
| @@ -2087,13 +2106,17 @@ class JSObject: public JSReceiver {
 | 
|    MUST_USE_RESULT MaybeObject* SetElementWithInterceptor(
 | 
|        uint32_t index,
 | 
|        Object* value,
 | 
| +      PropertyAttributes attributes,
 | 
|        StrictModeFlag strict_mode,
 | 
| -      bool check_prototype);
 | 
| +      bool check_prototype,
 | 
| +      SetPropertyMode set_mode);
 | 
|    MUST_USE_RESULT MaybeObject* SetElementWithoutInterceptor(
 | 
|        uint32_t index,
 | 
|        Object* value,
 | 
| +      PropertyAttributes attributes,
 | 
|        StrictModeFlag strict_mode,
 | 
| -      bool check_prototype);
 | 
| +      bool check_prototype,
 | 
| +      SetPropertyMode set_mode);
 | 
|  
 | 
|    // Searches the prototype chain for a callback setter and sets the property
 | 
|    // with the setter if it finds one. The '*found' flag indicates whether
 | 
| 
 |