| 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);
|
| }
|
|
|