| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 27987f59e8d68cbe43bd183eb97a42df02219202..b03c39e329540be4ef1be2794d974c9f5fe38569 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -622,22 +622,22 @@ Handle<Object> JSObject::GetPropertyWithFailedAccessCheck(
|
|
|
|
|
| PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck(
|
| - Object* receiver,
|
| + Handle<JSObject> object,
|
| LookupResult* result,
|
| - Name* name,
|
| + Handle<Name> name,
|
| bool continue_search) {
|
| if (result->IsProperty()) {
|
| switch (result->type()) {
|
| case CALLBACKS: {
|
| // Only allow API accessors.
|
| - Object* obj = result->GetCallbackObject();
|
| + Handle<Object> obj(result->GetCallbackObject(), object->GetIsolate());
|
| if (obj->IsAccessorInfo()) {
|
| - AccessorInfo* info = AccessorInfo::cast(obj);
|
| + Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(obj);
|
| if (info->all_can_read()) {
|
| return result->GetAttributes();
|
| }
|
| } else if (obj->IsAccessorPair()) {
|
| - AccessorPair* pair = AccessorPair::cast(obj);
|
| + Handle<AccessorPair> pair = Handle<AccessorPair>::cast(obj);
|
| if (pair->all_can_read()) {
|
| return result->GetAttributes();
|
| }
|
| @@ -650,13 +650,11 @@ PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck(
|
| case CONSTANT: {
|
| if (!continue_search) break;
|
| // Search ALL_CAN_READ accessors in prototype chain.
|
| - LookupResult r(GetIsolate());
|
| - result->holder()->LookupRealNamedPropertyInPrototypes(name, &r);
|
| + LookupResult r(object->GetIsolate());
|
| + result->holder()->LookupRealNamedPropertyInPrototypes(*name, &r);
|
| if (r.IsProperty()) {
|
| - return GetPropertyAttributeWithFailedAccessCheck(receiver,
|
| - &r,
|
| - name,
|
| - continue_search);
|
| + return GetPropertyAttributeWithFailedAccessCheck(
|
| + object, &r, name, continue_search);
|
| }
|
| break;
|
| }
|
| @@ -664,17 +662,15 @@ PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck(
|
| case INTERCEPTOR: {
|
| // If the object has an interceptor, try real named properties.
|
| // No access check in GetPropertyAttributeWithInterceptor.
|
| - LookupResult r(GetIsolate());
|
| + LookupResult r(object->GetIsolate());
|
| if (continue_search) {
|
| - result->holder()->LookupRealNamedProperty(name, &r);
|
| + result->holder()->LookupRealNamedProperty(*name, &r);
|
| } else {
|
| - result->holder()->LocalLookupRealNamedProperty(name, &r);
|
| + result->holder()->LocalLookupRealNamedProperty(*name, &r);
|
| }
|
| if (!r.IsFound()) break;
|
| - return GetPropertyAttributeWithFailedAccessCheck(receiver,
|
| - &r,
|
| - name,
|
| - continue_search);
|
| + return GetPropertyAttributeWithFailedAccessCheck(
|
| + object, &r, name, continue_search);
|
| }
|
|
|
| case HANDLER:
|
| @@ -684,7 +680,7 @@ PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck(
|
| }
|
| }
|
|
|
| - GetIsolate()->ReportFailedAccessCheck(this, v8::ACCESS_HAS);
|
| + object->GetIsolate()->ReportFailedAccessCheckWrapper(object, v8::ACCESS_HAS);
|
| return ABSENT;
|
| }
|
|
|
| @@ -3062,9 +3058,8 @@ Handle<Object> JSObject::SetPropertyViaPrototypes(Handle<JSObject> object,
|
| *done = result.IsReadOnly();
|
| break;
|
| case INTERCEPTOR: {
|
| - PropertyAttributes attr =
|
| - result.holder()->GetPropertyAttributeWithInterceptor(
|
| - *object, *name, true);
|
| + PropertyAttributes attr = GetPropertyAttributeWithInterceptor(
|
| + handle(result.holder()), object, name, true);
|
| *done = !!(attr & READ_ONLY);
|
| break;
|
| }
|
| @@ -3707,21 +3702,18 @@ Handle<Object> JSProxy::DeleteElementWithHandler(
|
| }
|
|
|
|
|
| -MUST_USE_RESULT PropertyAttributes JSProxy::GetPropertyAttributeWithHandler(
|
| - JSReceiver* receiver_raw,
|
| - Name* name_raw) {
|
| - Isolate* isolate = GetIsolate();
|
| +PropertyAttributes JSProxy::GetPropertyAttributeWithHandler(
|
| + Handle<JSProxy> proxy,
|
| + Handle<JSReceiver> receiver,
|
| + Handle<Name> name) {
|
| + Isolate* isolate = proxy->GetIsolate();
|
| HandleScope scope(isolate);
|
| - Handle<JSProxy> proxy(this);
|
| - Handle<Object> handler(this->handler(), isolate); // Trap might morph proxy.
|
| - Handle<JSReceiver> receiver(receiver_raw);
|
| - Handle<Object> name(name_raw, isolate);
|
|
|
| // TODO(rossberg): adjust once there is a story for symbols vs proxies.
|
| if (name->IsSymbol()) return ABSENT;
|
|
|
| Handle<Object> args[] = { name };
|
| - Handle<Object> result = CallTrap(
|
| + Handle<Object> result = proxy->CallTrap(
|
| "getPropertyDescriptor", Handle<Object>(), ARRAY_SIZE(args), args);
|
| if (isolate->has_pending_exception()) return NONE;
|
|
|
| @@ -3756,6 +3748,7 @@ MUST_USE_RESULT PropertyAttributes JSProxy::GetPropertyAttributeWithHandler(
|
| }
|
|
|
| if (configurable->IsFalse()) {
|
| + Handle<Object> handler(proxy->handler(), isolate);
|
| Handle<String> trap = isolate->factory()->InternalizeOneByteString(
|
| STATIC_ASCII_VECTOR("getPropertyDescriptor"));
|
| Handle<Object> args[] = { handler, trap, name };
|
| @@ -3773,15 +3766,13 @@ MUST_USE_RESULT PropertyAttributes JSProxy::GetPropertyAttributeWithHandler(
|
| }
|
|
|
|
|
| -MUST_USE_RESULT PropertyAttributes JSProxy::GetElementAttributeWithHandler(
|
| - JSReceiver* receiver_raw,
|
| +PropertyAttributes JSProxy::GetElementAttributeWithHandler(
|
| + Handle<JSProxy> proxy,
|
| + Handle<JSReceiver> receiver,
|
| uint32_t index) {
|
| - Isolate* isolate = GetIsolate();
|
| - HandleScope scope(isolate);
|
| - Handle<JSProxy> proxy(this);
|
| - Handle<JSReceiver> receiver(receiver_raw);
|
| + Isolate* isolate = proxy->GetIsolate();
|
| Handle<String> name = isolate->factory()->Uint32ToString(index);
|
| - return proxy->GetPropertyAttributeWithHandler(*receiver, *name);
|
| + return GetPropertyAttributeWithHandler(proxy, receiver, name);
|
| }
|
|
|
|
|
| @@ -4266,20 +4257,22 @@ Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes(
|
|
|
|
|
| PropertyAttributes JSObject::GetPropertyAttributePostInterceptor(
|
| - JSObject* receiver,
|
| - Name* name,
|
| - bool continue_search) {
|
| + Handle<JSObject> object,
|
| + Handle<JSObject> receiver,
|
| + Handle<Name> name,
|
| + bool continue_search) {
|
| // Check local property, ignore interceptor.
|
| - LookupResult result(GetIsolate());
|
| - LocalLookupRealNamedProperty(name, &result);
|
| + Isolate* isolate = object->GetIsolate();
|
| + LookupResult result(isolate);
|
| + object->LocalLookupRealNamedProperty(*name, &result);
|
| if (result.IsFound()) return result.GetAttributes();
|
|
|
| if (continue_search) {
|
| // Continue searching via the prototype chain.
|
| - Object* pt = GetPrototype();
|
| - if (!pt->IsNull()) {
|
| - return JSObject::cast(pt)->
|
| - GetPropertyAttributeWithReceiver(receiver, name);
|
| + Handle<Object> proto(object->GetPrototype(), isolate);
|
| + if (!proto->IsNull()) {
|
| + return JSReceiver::GetPropertyAttributeWithReceiver(
|
| + Handle<JSObject>::cast(proto), receiver, name);
|
| }
|
| }
|
| return ABSENT;
|
| @@ -4287,31 +4280,30 @@ PropertyAttributes JSObject::GetPropertyAttributePostInterceptor(
|
|
|
|
|
| PropertyAttributes JSObject::GetPropertyAttributeWithInterceptor(
|
| - JSObject* receiver,
|
| - Name* name,
|
| - bool continue_search) {
|
| + Handle<JSObject> object,
|
| + Handle<JSObject> receiver,
|
| + Handle<Name> name,
|
| + bool continue_search) {
|
| // TODO(rossberg): Support symbols in the API.
|
| if (name->IsSymbol()) return ABSENT;
|
|
|
| - Isolate* isolate = GetIsolate();
|
| + Isolate* isolate = object->GetIsolate();
|
| HandleScope scope(isolate);
|
|
|
| // Make sure that the top context does not change when doing
|
| // callbacks or interceptor calls.
|
| AssertNoContextChange ncc(isolate);
|
|
|
| - Handle<InterceptorInfo> interceptor(GetNamedInterceptor());
|
| - Handle<JSObject> receiver_handle(receiver);
|
| - Handle<JSObject> holder_handle(this);
|
| - Handle<String> name_handle(String::cast(name));
|
| - PropertyCallbackArguments args(isolate, interceptor->data(), receiver, this);
|
| + Handle<InterceptorInfo> interceptor(object->GetNamedInterceptor());
|
| + PropertyCallbackArguments args(
|
| + isolate, interceptor->data(), *receiver, *object);
|
| if (!interceptor->query()->IsUndefined()) {
|
| v8::NamedPropertyQueryCallback query =
|
| v8::ToCData<v8::NamedPropertyQueryCallback>(interceptor->query());
|
| LOG(isolate,
|
| - ApiNamedPropertyAccess("interceptor-named-has", *holder_handle, name));
|
| + ApiNamedPropertyAccess("interceptor-named-has", *object, *name));
|
| v8::Handle<v8::Integer> result =
|
| - args.Call(query, v8::Utils::ToLocal(name_handle));
|
| + args.Call(query, v8::Utils::ToLocal(Handle<String>::cast(name)));
|
| if (!result.IsEmpty()) {
|
| ASSERT(result->IsInt32());
|
| return static_cast<PropertyAttributes>(result->Int32Value());
|
| @@ -4320,44 +4312,45 @@ PropertyAttributes JSObject::GetPropertyAttributeWithInterceptor(
|
| v8::NamedPropertyGetterCallback getter =
|
| v8::ToCData<v8::NamedPropertyGetterCallback>(interceptor->getter());
|
| LOG(isolate,
|
| - ApiNamedPropertyAccess("interceptor-named-get-has", this, name));
|
| + ApiNamedPropertyAccess("interceptor-named-get-has", *object, *name));
|
| v8::Handle<v8::Value> result =
|
| - args.Call(getter, v8::Utils::ToLocal(name_handle));
|
| + args.Call(getter, v8::Utils::ToLocal(Handle<String>::cast(name)));
|
| if (!result.IsEmpty()) return DONT_ENUM;
|
| }
|
| - return holder_handle->GetPropertyAttributePostInterceptor(*receiver_handle,
|
| - *name_handle,
|
| - continue_search);
|
| + return GetPropertyAttributePostInterceptor(
|
| + object, receiver, name, continue_search);
|
| }
|
|
|
|
|
| PropertyAttributes JSReceiver::GetPropertyAttributeWithReceiver(
|
| - JSReceiver* receiver,
|
| - Name* key) {
|
| + Handle<JSReceiver> object,
|
| + Handle<JSReceiver> receiver,
|
| + Handle<Name> key) {
|
| uint32_t index = 0;
|
| - if (IsJSObject() && key->AsArrayIndex(&index)) {
|
| - return JSObject::cast(this)->GetElementAttributeWithReceiver(
|
| - receiver, index, true);
|
| + if (object->IsJSObject() && key->AsArrayIndex(&index)) {
|
| + return JSObject::GetElementAttributeWithReceiver(
|
| + Handle<JSObject>::cast(object), receiver, index, true);
|
| }
|
| // Named property.
|
| - LookupResult lookup(GetIsolate());
|
| - Lookup(key, &lookup);
|
| - return GetPropertyAttributeForResult(receiver, &lookup, key, true);
|
| + LookupResult lookup(object->GetIsolate());
|
| + object->Lookup(*key, &lookup);
|
| + return GetPropertyAttributeForResult(object, receiver, &lookup, key, true);
|
| }
|
|
|
|
|
| PropertyAttributes JSReceiver::GetPropertyAttributeForResult(
|
| - JSReceiver* receiver,
|
| + Handle<JSReceiver> object,
|
| + Handle<JSReceiver> receiver,
|
| LookupResult* lookup,
|
| - Name* name,
|
| + Handle<Name> name,
|
| bool continue_search) {
|
| // Check access rights if needed.
|
| - if (IsAccessCheckNeeded()) {
|
| - JSObject* this_obj = JSObject::cast(this);
|
| - Heap* heap = GetHeap();
|
| - if (!heap->isolate()->MayNamedAccess(this_obj, name, v8::ACCESS_HAS)) {
|
| - return this_obj->GetPropertyAttributeWithFailedAccessCheck(
|
| - receiver, lookup, name, continue_search);
|
| + if (object->IsAccessCheckNeeded()) {
|
| + Heap* heap = object->GetHeap();
|
| + Handle<JSObject> obj = Handle<JSObject>::cast(object);
|
| + if (!heap->isolate()->MayNamedAccessWrapper(obj, name, v8::ACCESS_HAS)) {
|
| + return JSObject::GetPropertyAttributeWithFailedAccessCheck(
|
| + obj, lookup, name, continue_search);
|
| }
|
| }
|
| if (lookup->IsFound()) {
|
| @@ -4368,12 +4361,15 @@ PropertyAttributes JSReceiver::GetPropertyAttributeForResult(
|
| case CALLBACKS:
|
| return lookup->GetAttributes();
|
| case HANDLER: {
|
| - return JSProxy::cast(lookup->proxy())->GetPropertyAttributeWithHandler(
|
| - receiver, name);
|
| + return JSProxy::GetPropertyAttributeWithHandler(
|
| + handle(lookup->proxy()), receiver, name);
|
| }
|
| case INTERCEPTOR:
|
| - return lookup->holder()->GetPropertyAttributeWithInterceptor(
|
| - JSObject::cast(receiver), name, continue_search);
|
| + return JSObject::GetPropertyAttributeWithInterceptor(
|
| + handle(lookup->holder()),
|
| + Handle<JSObject>::cast(receiver),
|
| + name,
|
| + continue_search);
|
| case TRANSITION:
|
| case NONEXISTENT:
|
| UNREACHABLE();
|
| @@ -4383,67 +4379,74 @@ PropertyAttributes JSReceiver::GetPropertyAttributeForResult(
|
| }
|
|
|
|
|
| -PropertyAttributes JSReceiver::GetLocalPropertyAttribute(Name* name) {
|
| +PropertyAttributes JSReceiver::GetLocalPropertyAttribute(
|
| + Handle<JSReceiver> object, Handle<Name> name) {
|
| // Check whether the name is an array index.
|
| uint32_t index = 0;
|
| - if (IsJSObject() && name->AsArrayIndex(&index)) {
|
| - return GetLocalElementAttribute(index);
|
| + if (object->IsJSObject() && name->AsArrayIndex(&index)) {
|
| + return GetLocalElementAttribute(object, index);
|
| }
|
| // Named property.
|
| - LookupResult lookup(GetIsolate());
|
| - LocalLookup(name, &lookup, true);
|
| - return GetPropertyAttributeForResult(this, &lookup, name, false);
|
| + LookupResult lookup(object->GetIsolate());
|
| + object->LocalLookup(*name, &lookup, true);
|
| + return GetPropertyAttributeForResult(object, object, &lookup, name, false);
|
| }
|
|
|
|
|
| PropertyAttributes JSObject::GetElementAttributeWithReceiver(
|
| - JSReceiver* receiver, uint32_t index, bool continue_search) {
|
| - Isolate* isolate = GetIsolate();
|
| + Handle<JSObject> object,
|
| + Handle<JSReceiver> receiver,
|
| + uint32_t index,
|
| + bool continue_search) {
|
| + Isolate* isolate = object->GetIsolate();
|
|
|
| // Check access rights if needed.
|
| - if (IsAccessCheckNeeded()) {
|
| - if (!isolate->MayIndexedAccess(this, index, v8::ACCESS_HAS)) {
|
| - isolate->ReportFailedAccessCheck(this, v8::ACCESS_HAS);
|
| + if (object->IsAccessCheckNeeded()) {
|
| + if (!isolate->MayIndexedAccessWrapper(object, index, v8::ACCESS_HAS)) {
|
| + isolate->ReportFailedAccessCheckWrapper(object, v8::ACCESS_HAS);
|
| return ABSENT;
|
| }
|
| }
|
|
|
| - if (IsJSGlobalProxy()) {
|
| - Object* proto = GetPrototype();
|
| + if (object->IsJSGlobalProxy()) {
|
| + Handle<Object> proto(object->GetPrototype(), isolate);
|
| if (proto->IsNull()) return ABSENT;
|
| ASSERT(proto->IsJSGlobalObject());
|
| - return JSObject::cast(proto)->GetElementAttributeWithReceiver(
|
| - receiver, index, continue_search);
|
| + return JSObject::GetElementAttributeWithReceiver(
|
| + Handle<JSObject>::cast(proto), receiver, index, continue_search);
|
| }
|
|
|
| // Check for lookup interceptor except when bootstrapping.
|
| - if (HasIndexedInterceptor() && !isolate->bootstrapper()->IsActive()) {
|
| - return GetElementAttributeWithInterceptor(receiver, index, continue_search);
|
| + if (object->HasIndexedInterceptor() && !isolate->bootstrapper()->IsActive()) {
|
| + return JSObject::GetElementAttributeWithInterceptor(
|
| + object, receiver, index, continue_search);
|
| }
|
|
|
| return GetElementAttributeWithoutInterceptor(
|
| - receiver, index, continue_search);
|
| + object, receiver, index, continue_search);
|
| }
|
|
|
|
|
| PropertyAttributes JSObject::GetElementAttributeWithInterceptor(
|
| - JSReceiver* receiver, uint32_t index, bool continue_search) {
|
| - Isolate* isolate = GetIsolate();
|
| + Handle<JSObject> object,
|
| + Handle<JSReceiver> receiver,
|
| + uint32_t index,
|
| + bool continue_search) {
|
| + Isolate* isolate = object->GetIsolate();
|
| HandleScope scope(isolate);
|
|
|
| // Make sure that the top context does not change when doing
|
| // callbacks or interceptor calls.
|
| AssertNoContextChange ncc(isolate);
|
|
|
| - Handle<InterceptorInfo> interceptor(GetIndexedInterceptor());
|
| - Handle<JSReceiver> hreceiver(receiver);
|
| - Handle<JSObject> holder(this);
|
| - PropertyCallbackArguments args(isolate, interceptor->data(), receiver, this);
|
| + Handle<InterceptorInfo> interceptor(object->GetIndexedInterceptor());
|
| + PropertyCallbackArguments args(
|
| + isolate, interceptor->data(), *receiver, *object);
|
| if (!interceptor->query()->IsUndefined()) {
|
| v8::IndexedPropertyQueryCallback query =
|
| v8::ToCData<v8::IndexedPropertyQueryCallback>(interceptor->query());
|
| LOG(isolate,
|
| - ApiIndexedPropertyAccess("interceptor-indexed-has", this, index));
|
| + ApiIndexedPropertyAccess("interceptor-indexed-has", *object, index));
|
| v8::Handle<v8::Integer> result = args.Call(query, index);
|
| if (!result.IsEmpty())
|
| return static_cast<PropertyAttributes>(result->Int32Value());
|
| @@ -4451,37 +4454,42 @@ PropertyAttributes JSObject::GetElementAttributeWithInterceptor(
|
| v8::IndexedPropertyGetterCallback getter =
|
| v8::ToCData<v8::IndexedPropertyGetterCallback>(interceptor->getter());
|
| LOG(isolate,
|
| - ApiIndexedPropertyAccess("interceptor-indexed-get-has", this, index));
|
| + ApiIndexedPropertyAccess(
|
| + "interceptor-indexed-get-has", *object, index));
|
| v8::Handle<v8::Value> result = args.Call(getter, index);
|
| if (!result.IsEmpty()) return NONE;
|
| }
|
|
|
| - return holder->GetElementAttributeWithoutInterceptor(
|
| - *hreceiver, index, continue_search);
|
| + return GetElementAttributeWithoutInterceptor(
|
| + object, receiver, index, continue_search);
|
| }
|
|
|
|
|
| PropertyAttributes JSObject::GetElementAttributeWithoutInterceptor(
|
| - JSReceiver* receiver, uint32_t index, bool continue_search) {
|
| - PropertyAttributes attr = GetElementsAccessor()->GetAttributes(
|
| - receiver, this, index);
|
| + Handle<JSObject> object,
|
| + Handle<JSReceiver> receiver,
|
| + uint32_t index,
|
| + bool continue_search) {
|
| + PropertyAttributes attr = object->GetElementsAccessor()->GetAttributes(
|
| + *receiver, *object, index);
|
| if (attr != ABSENT) return attr;
|
|
|
| // Handle [] on String objects.
|
| - if (IsStringObjectWithCharacterAt(index)) {
|
| + if (object->IsStringObjectWithCharacterAt(index)) {
|
| return static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE);
|
| }
|
|
|
| if (!continue_search) return ABSENT;
|
|
|
| - Object* pt = GetPrototype();
|
| - if (pt->IsJSProxy()) {
|
| + Handle<Object> proto(object->GetPrototype(), object->GetIsolate());
|
| + if (proto->IsJSProxy()) {
|
| // We need to follow the spec and simulate a call to [[GetOwnProperty]].
|
| - return JSProxy::cast(pt)->GetElementAttributeWithHandler(receiver, index);
|
| + return JSProxy::GetElementAttributeWithHandler(
|
| + Handle<JSProxy>::cast(proto), receiver, index);
|
| }
|
| - if (pt->IsNull()) return ABSENT;
|
| - return JSObject::cast(pt)->GetElementAttributeWithReceiver(
|
| - receiver, index, true);
|
| + if (proto->IsNull()) return ABSENT;
|
| + return GetElementAttributeWithReceiver(
|
| + Handle<JSObject>::cast(proto), receiver, index, true);
|
| }
|
|
|
|
|
| @@ -4940,10 +4948,10 @@ void JSObject::DeleteHiddenProperty(Handle<JSObject> object, Handle<Name> key) {
|
| }
|
|
|
|
|
| -bool JSObject::HasHiddenProperties() {
|
| - return GetPropertyAttributePostInterceptor(this,
|
| - GetHeap()->hidden_string(),
|
| - false) != ABSENT;
|
| +bool JSObject::HasHiddenProperties(Handle<JSObject> object) {
|
| + Handle<Name> hidden = object->GetIsolate()->factory()->hidden_string();
|
| + return GetPropertyAttributePostInterceptor(
|
| + object, object, hidden, false) != ABSENT;
|
| }
|
|
|
|
|
| @@ -5024,7 +5032,7 @@ Handle<Object> JSObject::SetHiddenPropertiesHashTable(Handle<JSObject> object,
|
|
|
| // We can store the identity hash inline iff there is no backing store
|
| // for hidden properties yet.
|
| - ASSERT(object->HasHiddenProperties() != value->IsSmi());
|
| + ASSERT(JSObject::HasHiddenProperties(object) != value->IsSmi());
|
| if (object->HasFastProperties()) {
|
| // If the object has fast properties, check whether the first slot
|
| // in the descriptor array matches the hidden string. Since the
|
| @@ -5774,7 +5782,7 @@ Handle<JSObject> JSObjectWalkVisitor<ContextObject>::StructureWalk(
|
| ASSERT(names->get(i)->IsString());
|
| Handle<String> key_string(String::cast(names->get(i)));
|
| PropertyAttributes attributes =
|
| - copy->GetLocalPropertyAttribute(*key_string);
|
| + JSReceiver::GetLocalPropertyAttribute(copy, key_string);
|
| // Only deep copy fields from the object literal expression.
|
| // In particular, don't try to copy the length attribute of
|
| // an array.
|
| @@ -11347,7 +11355,8 @@ static bool GetOldValue(Isolate* isolate,
|
| uint32_t index,
|
| List<Handle<Object> >* old_values,
|
| List<uint32_t>* indices) {
|
| - PropertyAttributes attributes = object->GetLocalElementAttribute(index);
|
| + PropertyAttributes attributes =
|
| + JSReceiver::GetLocalElementAttribute(object, index);
|
| ASSERT(attributes != ABSENT);
|
| if (attributes == DONT_DELETE) return false;
|
| old_values->Add(object->GetLocalElementAccessorPair(index) == NULL
|
| @@ -12550,7 +12559,8 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object,
|
| set_mode);
|
| }
|
|
|
| - PropertyAttributes old_attributes = object->GetLocalElementAttribute(index);
|
| + PropertyAttributes old_attributes =
|
| + JSReceiver::GetLocalElementAttribute(object, index);
|
| Handle<Object> old_value = isolate->factory()->the_hole_value();
|
| Handle<Object> old_length_handle;
|
| Handle<Object> new_length_handle;
|
| @@ -12576,7 +12586,7 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object,
|
| RETURN_IF_EMPTY_HANDLE_VALUE(isolate, result, Handle<Object>());
|
|
|
| Handle<String> name = isolate->factory()->Uint32ToString(index);
|
| - PropertyAttributes new_attributes = object->GetLocalElementAttribute(index);
|
| + PropertyAttributes new_attributes = GetLocalElementAttribute(object, index);
|
| if (old_attributes == ABSENT) {
|
| if (object->IsJSArray() &&
|
| !old_length_handle->SameValue(
|
| @@ -13349,7 +13359,7 @@ bool JSObject::HasRealNamedProperty(Handle<JSObject> object,
|
|
|
| bool JSObject::HasRealElementProperty(Handle<JSObject> object, uint32_t index) {
|
| Isolate* isolate = object->GetIsolate();
|
| - SealHandleScope shs(isolate);
|
| + HandleScope scope(isolate);
|
| // Check access rights if needed.
|
| if (object->IsAccessCheckNeeded()) {
|
| if (!isolate->MayIndexedAccessWrapper(object, index, v8::ACCESS_HAS)) {
|
| @@ -13366,8 +13376,8 @@ bool JSObject::HasRealElementProperty(Handle<JSObject> object, uint32_t index) {
|
| return HasRealElementProperty(Handle<JSObject>::cast(proto), index);
|
| }
|
|
|
| - return object->GetElementAttributeWithoutInterceptor(
|
| - *object, index, false) != ABSENT;
|
| + return GetElementAttributeWithoutInterceptor(
|
| + object, object, index, false) != ABSENT;
|
| }
|
|
|
|
|
|
|