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 |