Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 8cf74ad33836a191159334430bd6b8c71323f554..2937cec0b133378446822599fdb7b2145963ba38 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -452,14 +452,17 @@ MaybeObject* JSProxy::GetElementWithHandler(Object* receiver, |
} |
-MaybeObject* JSProxy::SetElementWithHandler(JSReceiver* receiver, |
- uint32_t index, |
- Object* value, |
- StrictModeFlag strict_mode) { |
- String* name; |
- MaybeObject* maybe = GetHeap()->Uint32ToString(index); |
- if (!maybe->To<String>(&name)) return maybe; |
- return SetPropertyWithHandler(receiver, name, value, NONE, strict_mode); |
+Handle<Object> JSProxy::SetElementWithHandler(Handle<JSProxy> proxy, |
+ Handle<JSReceiver> receiver, |
+ uint32_t index, |
+ Handle<Object> value, |
+ StrictModeFlag strict_mode) { |
+ Isolate* isolate = proxy->GetIsolate(); |
+ Handle<String> name = isolate->factory()->Uint32ToString(index); |
+ CALL_HEAP_FUNCTION(isolate, |
+ proxy->SetPropertyWithHandler( |
+ *receiver, *name, *value, NONE, strict_mode), |
+ Object); |
} |
@@ -3541,20 +3544,20 @@ MUST_USE_RESULT MaybeObject* JSProxy::SetPropertyViaPrototypesWithHandler( |
Handle<Object> JSProxy::DeletePropertyWithHandler( |
- Handle<JSProxy> object, Handle<Name> name, DeleteMode mode) { |
- Isolate* isolate = object->GetIsolate(); |
+ Handle<JSProxy> proxy, Handle<Name> name, DeleteMode mode) { |
+ Isolate* isolate = proxy->GetIsolate(); |
// TODO(rossberg): adjust once there is a story for symbols vs proxies. |
if (name->IsSymbol()) return isolate->factory()->false_value(); |
Handle<Object> args[] = { name }; |
- Handle<Object> result = object->CallTrap( |
+ Handle<Object> result = proxy->CallTrap( |
"delete", Handle<Object>(), ARRAY_SIZE(args), args); |
if (isolate->has_pending_exception()) return Handle<Object>(); |
bool result_bool = result->BooleanValue(); |
if (mode == STRICT_DELETION && !result_bool) { |
- Handle<Object> handler(object->handler(), isolate); |
+ Handle<Object> handler(proxy->handler(), isolate); |
Handle<String> trap_name = isolate->factory()->InternalizeOneByteString( |
STATIC_ASCII_VECTOR("delete")); |
Handle<Object> args[] = { handler, trap_name }; |
@@ -3568,10 +3571,10 @@ Handle<Object> JSProxy::DeletePropertyWithHandler( |
Handle<Object> JSProxy::DeleteElementWithHandler( |
- Handle<JSProxy> object, uint32_t index, DeleteMode mode) { |
- Isolate* isolate = object->GetIsolate(); |
+ Handle<JSProxy> proxy, uint32_t index, DeleteMode mode) { |
+ Isolate* isolate = proxy->GetIsolate(); |
Handle<String> name = isolate->factory()->Uint32ToString(index); |
- return JSProxy::DeletePropertyWithHandler(object, name, mode); |
+ return JSProxy::DeletePropertyWithHandler(proxy, name, mode); |
} |
@@ -12111,18 +12114,17 @@ MUST_USE_RESULT MaybeObject* JSObject::SetFastDoubleElement( |
} |
-MaybeObject* JSReceiver::SetElement(uint32_t index, |
- Object* value, |
- PropertyAttributes attributes, |
- StrictModeFlag strict_mode, |
- bool check_proto) { |
- if (IsJSProxy()) { |
- return JSProxy::cast(this)->SetElementWithHandler( |
- this, index, value, strict_mode); |
- } else { |
- return JSObject::cast(this)->SetElement( |
- index, value, attributes, strict_mode, check_proto); |
+Handle<Object> JSReceiver::SetElement(Handle<JSReceiver> object, |
+ uint32_t index, |
+ Handle<Object> value, |
+ PropertyAttributes attributes, |
+ StrictModeFlag strict_mode) { |
+ if (object->IsJSProxy()) { |
+ return JSProxy::SetElementWithHandler( |
+ Handle<JSProxy>::cast(object), object, index, value, strict_mode); |
} |
+ return JSObject::SetElement( |
+ Handle<JSObject>::cast(object), index, value, attributes, strict_mode); |
} |