| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index ce0aa6d92e28c2d1c4751d0f17c7a928eb6423be..8ff662331d4e4f9181b69d3772eda58826b2a017 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -5192,7 +5192,7 @@ Handle<Object> JSObject::DeleteElement(Handle<JSObject> object,
|
| if (object->map()->is_observed()) {
|
| should_enqueue_change_record = HasLocalElement(object, index);
|
| if (should_enqueue_change_record) {
|
| - if (object->GetLocalElementAccessorPair(index) != NULL) {
|
| + if (!GetLocalElementAccessorPair(object, index).is_null()) {
|
| old_value = Handle<Object>::cast(factory->the_hole_value());
|
| } else {
|
| old_value = Object::GetElementNoExceptionThrown(isolate, object, index);
|
| @@ -6371,7 +6371,7 @@ void JSObject::DefineAccessor(Handle<JSObject> object,
|
| if (is_observed) {
|
| if (is_element) {
|
| preexists = HasLocalElement(object, index);
|
| - if (preexists && object->GetLocalElementAccessorPair(index) == NULL) {
|
| + if (preexists && GetLocalElementAccessorPair(object, index).is_null()) {
|
| old_value = Object::GetElementNoExceptionThrown(isolate, object, index);
|
| }
|
| } else {
|
| @@ -11319,7 +11319,7 @@ static bool GetOldValue(Isolate* isolate,
|
| ASSERT(attributes != ABSENT);
|
| if (attributes == DONT_DELETE) return false;
|
| Handle<Object> value;
|
| - if (object->GetLocalElementAccessorPair(index) != NULL) {
|
| + if (!JSObject::GetLocalElementAccessorPair(object, index).is_null()) {
|
| value = Handle<Object>::cast(isolate->factory()->the_hole_value());
|
| } else {
|
| value = Object::GetElementNoExceptionThrown(isolate, object, index);
|
| @@ -11858,35 +11858,40 @@ void JSObject::EnsureCanContainElements(Handle<JSObject> object,
|
| }
|
|
|
|
|
| -AccessorPair* JSObject::GetLocalPropertyAccessorPair(Name* name) {
|
| +MaybeHandle<AccessorPair> JSObject::GetLocalPropertyAccessorPair(
|
| + Handle<JSObject> object,
|
| + Handle<Name> name) {
|
| uint32_t index = 0;
|
| if (name->AsArrayIndex(&index)) {
|
| - return GetLocalElementAccessorPair(index);
|
| + return GetLocalElementAccessorPair(object, index);
|
| }
|
|
|
| - LookupResult lookup(GetIsolate());
|
| - LocalLookupRealNamedProperty(name, &lookup);
|
| + Isolate* isolate = object->GetIsolate();
|
| + LookupResult lookup(isolate);
|
| + object->LocalLookupRealNamedProperty(*name, &lookup);
|
|
|
| if (lookup.IsPropertyCallbacks() &&
|
| lookup.GetCallbackObject()->IsAccessorPair()) {
|
| - return AccessorPair::cast(lookup.GetCallbackObject());
|
| + return handle(AccessorPair::cast(lookup.GetCallbackObject()), isolate);
|
| }
|
| - return NULL;
|
| + return MaybeHandle<AccessorPair>();
|
| }
|
|
|
|
|
| -AccessorPair* JSObject::GetLocalElementAccessorPair(uint32_t index) {
|
| - if (IsJSGlobalProxy()) {
|
| - Object* proto = GetPrototype();
|
| - if (proto->IsNull()) return NULL;
|
| +MaybeHandle<AccessorPair> JSObject::GetLocalElementAccessorPair(
|
| + Handle<JSObject> object,
|
| + uint32_t index) {
|
| + if (object->IsJSGlobalProxy()) {
|
| + Handle<Object> proto(object->GetPrototype(), object->GetIsolate());
|
| + if (proto->IsNull()) return MaybeHandle<AccessorPair>();
|
| ASSERT(proto->IsJSGlobalObject());
|
| - return JSObject::cast(proto)->GetLocalElementAccessorPair(index);
|
| + return GetLocalElementAccessorPair(Handle<JSObject>::cast(proto), index);
|
| }
|
|
|
| // Check for lookup interceptor.
|
| - if (HasIndexedInterceptor()) return NULL;
|
| + if (object->HasIndexedInterceptor()) return MaybeHandle<AccessorPair>();
|
|
|
| - return GetElementsAccessor()->GetAccessorPair(this, this, index);
|
| + return object->GetElementsAccessor()->GetAccessorPair(object, object, index);
|
| }
|
|
|
|
|
| @@ -12535,7 +12540,7 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object,
|
| Handle<Object> new_length_handle;
|
|
|
| if (old_attributes != ABSENT) {
|
| - if (object->GetLocalElementAccessorPair(index) == NULL) {
|
| + if (GetLocalElementAccessorPair(object, index).is_null()) {
|
| old_value = Object::GetElementNoExceptionThrown(isolate, object, index);
|
| }
|
| } else if (object->IsJSArray()) {
|
|
|