Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 410601ddbe8cf76764c653dc678c23cc9f5866f2..e527fc665f2debd2984680714d3e65d23e86953f 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -460,11 +460,10 @@ Handle<Object> JSProxy::SetElementWithHandler(Handle<JSProxy> proxy, |
} |
-bool JSProxy::HasElementWithHandler(uint32_t index) { |
- String* name; |
- MaybeObject* maybe = GetHeap()->Uint32ToString(index); |
- if (!maybe->To<String>(&name)) return maybe; |
- return HasPropertyWithHandler(name); |
+bool JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index) { |
+ Isolate* isolate = proxy->GetIsolate(); |
+ Handle<String> name = isolate->factory()->Uint32ToString(index); |
+ return HasPropertyWithHandler(proxy, name); |
} |
@@ -740,7 +739,8 @@ Handle<Object> JSObject::DeleteNormalizedProperty(Handle<JSObject> object, |
object->set_map(*new_map); |
} |
Handle<PropertyCell> cell(PropertyCell::cast(dictionary->ValueAt(entry))); |
- PropertyCell::SetValueInferType(cell, isolate->factory()->the_hole_value()); |
+ Handle<Object> value = isolate->factory()->the_hole_value(); |
+ PropertyCell::SetValueInferType(cell, value); |
dictionary->DetailsAtPut(entry, details.AsDeleted()); |
} else { |
Handle<Object> deleted(dictionary->DeleteProperty(entry, mode), isolate); |
@@ -3417,17 +3417,14 @@ Handle<Object> JSReceiver::SetProperty(Handle<JSReceiver> object, |
} |
-bool JSProxy::HasPropertyWithHandler(Name* name_raw) { |
- Isolate* isolate = GetIsolate(); |
- HandleScope scope(isolate); |
- Handle<Object> receiver(this, isolate); |
- Handle<Object> name(name_raw, isolate); |
+bool JSProxy::HasPropertyWithHandler(Handle<JSProxy> proxy, Handle<Name> name) { |
+ Isolate* isolate = proxy->GetIsolate(); |
// TODO(rossberg): adjust once there is a story for symbols vs proxies. |
if (name->IsSymbol()) return false; |
Handle<Object> args[] = { name }; |
- Handle<Object> result = CallTrap( |
+ Handle<Object> result = proxy->CallTrap( |
"has", isolate->derived_has_trap(), ARRAY_SIZE(args), args); |
if (isolate->has_pending_exception()) return false; |
@@ -5086,7 +5083,7 @@ Handle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
Handle<Object> old_value; |
bool should_enqueue_change_record = false; |
if (FLAG_harmony_observation && object->map()->is_observed()) { |
- should_enqueue_change_record = object->HasLocalElement(index); |
+ should_enqueue_change_record = HasLocalElement(object, index); |
if (should_enqueue_change_record) { |
old_value = object->GetLocalElementAccessorPair(index) != NULL |
? Handle<Object>::cast(factory->the_hole_value()) |
@@ -5102,7 +5099,7 @@ Handle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
result = AccessorDelete(object, index, mode); |
} |
- if (should_enqueue_change_record && !object->HasLocalElement(index)) { |
+ if (should_enqueue_change_record && !HasLocalElement(object, index)) { |
Handle<String> name = factory->Uint32ToString(index); |
EnqueueChangeRecord(object, "deleted", name, old_value); |
} |
@@ -5177,7 +5174,7 @@ Handle<Object> JSObject::DeleteProperty(Handle<JSObject> object, |
result = DeleteNormalizedProperty(object, name, mode); |
} |
- if (is_observed && !object->HasLocalProperty(*name)) { |
+ if (is_observed && !HasLocalProperty(object, name)) { |
EnqueueChangeRecord(object, "deleted", name, old_value); |
} |
@@ -6128,7 +6125,7 @@ void JSObject::DefineAccessor(Handle<JSObject> object, |
bool preexists = false; |
if (is_observed) { |
if (is_element) { |
- preexists = object->HasLocalElement(index); |
+ preexists = HasLocalElement(object, index); |
if (preexists && object->GetLocalElementAccessorPair(index) == NULL) { |
old_value = Object::GetElement(isolate, object, index); |
} |