Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 92e4dc4c8c9c98f03a6267e2f393dda5c4312803..8ba18ee61d30e2e333830489676280ac038c57d6 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -493,19 +493,11 @@ Handle<Object> Object::GetProperty(Handle<Object> object, |
// method (or somewhere else entirely). Needs more global clean-up. |
uint32_t index; |
Isolate* isolate = name->GetIsolate(); |
- if (name->AsArrayIndex(&index)) |
- return GetElement(isolate, object, index); |
+ if (name->AsArrayIndex(&index)) return GetElement(isolate, object, index); |
CALL_HEAP_FUNCTION(isolate, object->GetProperty(*name), Object); |
} |
-Handle<Object> Object::GetElement(Isolate* isolate, |
- Handle<Object> object, |
- uint32_t index) { |
- CALL_HEAP_FUNCTION(isolate, object->GetElement(isolate, index), Object); |
-} |
- |
- |
MaybeObject* JSProxy::GetElementWithHandler(Object* receiver, |
uint32_t index) { |
String* name; |
@@ -4076,6 +4068,7 @@ Handle<Object> JSObject::SetPropertyForResult(Handle<JSObject> object, |
*name != isolate->heap()->hidden_string(); |
if (is_observed && lookup->IsDataProperty()) { |
old_value = Object::GetProperty(object, name); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
} |
// This is a real property that is not read-only, or it is a |
@@ -4121,6 +4114,7 @@ Handle<Object> JSObject::SetPropertyForResult(Handle<JSObject> object, |
object->LocalLookup(*name, &new_lookup, true); |
if (new_lookup.IsDataProperty()) { |
Handle<Object> new_value = Object::GetProperty(object, name); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, new_value); |
if (!new_value->SameValue(*old_value)) { |
EnqueueChangeRecord(object, "update", name, old_value); |
} |
@@ -4197,8 +4191,10 @@ Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes( |
bool is_observed = object->map()->is_observed() && |
*name != isolate->heap()->hidden_string(); |
if (is_observed && lookup.IsProperty()) { |
- if (lookup.IsDataProperty()) old_value = |
- Object::GetProperty(object, name); |
+ if (lookup.IsDataProperty()) { |
+ old_value = Object::GetProperty(object, name); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
+ } |
old_attributes = lookup.GetAttributes(); |
} |
@@ -4243,6 +4239,7 @@ Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes( |
bool value_changed = false; |
if (new_lookup.IsDataProperty()) { |
Handle<Object> new_value = Object::GetProperty(object, name); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, new_value); |
value_changed = !old_value->SameValue(*new_value); |
} |
if (new_lookup.GetAttributes() != old_attributes) { |
@@ -5197,9 +5194,12 @@ Handle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
if (object->map()->is_observed()) { |
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()) |
- : Object::GetElement(isolate, object, index); |
+ if (object->GetLocalElementAccessorPair(index) != NULL) { |
+ old_value = Handle<Object>::cast(factory->the_hole_value()); |
+ } else { |
+ old_value = Object::GetElement(isolate, object, index); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
+ } |
} |
} |
@@ -5269,6 +5269,7 @@ Handle<Object> JSObject::DeleteProperty(Handle<JSObject> object, |
*name != isolate->heap()->hidden_string(); |
if (is_observed && lookup.IsDataProperty()) { |
old_value = Object::GetProperty(object, name); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
} |
Handle<Object> result; |
@@ -6367,6 +6368,7 @@ void JSObject::DefineAccessor(Handle<JSObject> object, |
preexists = HasLocalElement(object, index); |
if (preexists && object->GetLocalElementAccessorPair(index) == NULL) { |
old_value = Object::GetElement(isolate, object, index); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
} |
} else { |
LookupResult lookup(isolate); |
@@ -6374,6 +6376,7 @@ void JSObject::DefineAccessor(Handle<JSObject> object, |
preexists = lookup.IsProperty(); |
if (preexists && lookup.IsDataProperty()) { |
old_value = Object::GetProperty(object, name); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
} |
} |
} |
@@ -11361,9 +11364,14 @@ static bool GetOldValue(Isolate* isolate, |
JSReceiver::GetLocalElementAttribute(object, index); |
ASSERT(attributes != ABSENT); |
if (attributes == DONT_DELETE) return false; |
- old_values->Add(object->GetLocalElementAccessorPair(index) == NULL |
- ? Object::GetElement(isolate, object, index) |
- : Handle<Object>::cast(isolate->factory()->the_hole_value())); |
+ Handle<Object> value; |
+ if (object->GetLocalElementAccessorPair(index) != NULL) { |
+ value = Handle<Object>::cast(isolate->factory()->the_hole_value()); |
+ } else { |
+ value = Object::GetElement(isolate, object, index); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, value); |
+ } |
+ old_values->Add(value); |
indices->Add(index); |
return true; |
} |
@@ -12568,8 +12576,10 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object, |
Handle<Object> new_length_handle; |
if (old_attributes != ABSENT) { |
- if (object->GetLocalElementAccessorPair(index) == NULL) |
+ if (object->GetLocalElementAccessorPair(index) == NULL) { |
old_value = Object::GetElement(isolate, object, index); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, old_value); |
+ } |
} else if (object->IsJSArray()) { |
// Store old array length in case adding an element grows the array. |
old_length_handle = handle(Handle<JSArray>::cast(object)->length(), |
@@ -12615,6 +12625,7 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object, |
EnqueueChangeRecord(object, "reconfigure", name, old_value); |
} else { |
Handle<Object> new_value = Object::GetElement(isolate, object, index); |
+ CHECK_NOT_EMPTY_HANDLE(isolate, new_value); |
bool value_changed = !old_value->SameValue(*new_value); |
if (old_attributes != new_attributes) { |
if (!value_changed) old_value = isolate->factory()->the_hole_value(); |