Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index fb1b37e563a4b26fd69da24b59b1ffaef954b75f..6f9dee280471c98dbd05414141f70185a9eab94b 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -1056,18 +1056,13 @@ MaybeHandle<Object> Object::GetPropertyWithAccessor(LookupIterator* it) { |
v8::ToCData<v8::AccessorNameGetterCallback>(info->getter()); |
if (call_fun == nullptr) return isolate->factory()->undefined_value(); |
- LOG(isolate, ApiNamedPropertyAccess("load", *holder, *name)); |
PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder, |
Object::DONT_THROW); |
- v8::Local<v8::Value> result = args.Call(call_fun, v8::Utils::ToLocal(name)); |
+ Handle<Object> result = args.Call(call_fun, name); |
RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
- if (result.IsEmpty()) { |
- return ReadAbsentProperty(isolate, receiver, name); |
- } |
- Handle<Object> return_value = v8::Utils::OpenHandle(*result); |
- return_value->VerifyApiCallResultType(); |
+ if (result.is_null()) return ReadAbsentProperty(isolate, receiver, name); |
// Rebox handle before return. |
- return handle(*return_value, isolate); |
+ return handle(*result, isolate); |
} |
// Regular accessor. |
@@ -1131,10 +1126,9 @@ Maybe<bool> Object::SetPropertyWithAccessor(LookupIterator* it, |
// have a setter. |
if (call_fun == nullptr) return Just(true); |
- LOG(isolate, ApiNamedPropertyAccess("store", *holder, *name)); |
PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder, |
should_throw); |
- args.Call(call_fun, v8::Utils::ToLocal(name), v8::Utils::ToLocal(value)); |
+ args.Call(call_fun, name, value); |
RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Nothing<bool>()); |
return Just(true); |
} |
@@ -4072,7 +4066,7 @@ Maybe<bool> JSObject::SetPropertyWithInterceptor(LookupIterator* it, |
if (interceptor->setter()->IsUndefined()) return Just(false); |
Handle<JSObject> holder = it->GetHolder<JSObject>(); |
- v8::Local<v8::Value> result; |
+ bool result; |
PropertyCallbackArguments args(isolate, interceptor->data(), |
*it->GetReceiver(), *holder, should_throw); |
@@ -4080,9 +4074,9 @@ Maybe<bool> JSObject::SetPropertyWithInterceptor(LookupIterator* it, |
uint32_t index = it->index(); |
v8::IndexedPropertySetterCallback setter = |
v8::ToCData<v8::IndexedPropertySetterCallback>(interceptor->setter()); |
- LOG(isolate, |
- ApiIndexedPropertyAccess("interceptor-indexed-set", *holder, index)); |
- result = args.Call(setter, index, v8::Utils::ToLocal(value)); |
+ // TODO(neis): In the future, we may want to actually return the |
+ // interceptor's result, which then should be a boolean. |
+ result = !args.Call(setter, index, value).is_null(); |
} else { |
Handle<Name> name = it->name(); |
DCHECK(!name->IsPrivate()); |
@@ -4094,21 +4088,11 @@ Maybe<bool> JSObject::SetPropertyWithInterceptor(LookupIterator* it, |
v8::GenericNamedPropertySetterCallback setter = |
v8::ToCData<v8::GenericNamedPropertySetterCallback>( |
interceptor->setter()); |
- LOG(it->isolate(), |
- ApiNamedPropertyAccess("interceptor-named-set", *holder, *name)); |
- result = |
- args.Call(setter, v8::Utils::ToLocal(name), v8::Utils::ToLocal(value)); |
+ result = !args.Call(setter, name, value).is_null(); |
} |
RETURN_VALUE_IF_SCHEDULED_EXCEPTION(it->isolate(), Nothing<bool>()); |
- if (result.IsEmpty()) return Just(false); |
-#ifdef DEBUG |
- Handle<Object> result_internal = v8::Utils::OpenHandle(*result); |
- result_internal->VerifyApiCallResultType(); |
-#endif |
- return Just(true); |
- // TODO(neis): In the future, we may want to actually return the interceptor's |
- // result, which then should be a boolean. |
+ return Just(result); |
} |
@@ -5421,13 +5405,11 @@ Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor( |
*it->GetReceiver(), *holder, |
Object::DONT_THROW); |
if (!interceptor->query()->IsUndefined()) { |
- v8::Local<v8::Integer> result; |
+ Handle<Object> result; |
if (it->IsElement()) { |
uint32_t index = it->index(); |
v8::IndexedPropertyQueryCallback query = |
v8::ToCData<v8::IndexedPropertyQueryCallback>(interceptor->query()); |
- LOG(isolate, |
- ApiIndexedPropertyAccess("interceptor-indexed-has", *holder, index)); |
result = args.Call(query, index); |
} else { |
Handle<Name> name = it->name(); |
@@ -5435,25 +5417,20 @@ Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor( |
v8::GenericNamedPropertyQueryCallback query = |
v8::ToCData<v8::GenericNamedPropertyQueryCallback>( |
interceptor->query()); |
- LOG(isolate, |
- ApiNamedPropertyAccess("interceptor-named-has", *holder, *name)); |
- result = args.Call(query, v8::Utils::ToLocal(name)); |
+ result = args.Call(query, name); |
} |
- if (!result.IsEmpty()) { |
- DCHECK(result->IsInt32()); |
- return Just(static_cast<PropertyAttributes>( |
- result->Int32Value(reinterpret_cast<v8::Isolate*>(isolate) |
- ->GetCurrentContext()).FromJust())); |
+ if (!result.is_null()) { |
+ int32_t value; |
+ CHECK(result->ToInt32(&value)); |
+ return Just(static_cast<PropertyAttributes>(value)); |
} |
} else if (!interceptor->getter()->IsUndefined()) { |
// TODO(verwaest): Use GetPropertyWithInterceptor? |
- v8::Local<v8::Value> result; |
+ Handle<Object> result; |
if (it->IsElement()) { |
uint32_t index = it->index(); |
v8::IndexedPropertyGetterCallback getter = |
v8::ToCData<v8::IndexedPropertyGetterCallback>(interceptor->getter()); |
- LOG(isolate, ApiIndexedPropertyAccess("interceptor-indexed-get-has", |
- *holder, index)); |
result = args.Call(getter, index); |
} else { |
Handle<Name> name = it->name(); |
@@ -5461,11 +5438,9 @@ Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor( |
v8::GenericNamedPropertyGetterCallback getter = |
v8::ToCData<v8::GenericNamedPropertyGetterCallback>( |
interceptor->getter()); |
- LOG(isolate, |
- ApiNamedPropertyAccess("interceptor-named-get-has", *holder, *name)); |
- result = args.Call(getter, v8::Utils::ToLocal(name)); |
+ result = args.Call(getter, name); |
} |
- if (!result.IsEmpty()) return Just(DONT_ENUM); |
+ if (!result.is_null()) return Just(DONT_ENUM); |
} |
RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Nothing<PropertyAttributes>()); |
@@ -6077,13 +6052,11 @@ Maybe<bool> JSObject::DeletePropertyWithInterceptor(LookupIterator* it, |
PropertyCallbackArguments args(isolate, interceptor->data(), |
*it->GetReceiver(), *holder, should_throw); |
- v8::Local<v8::Boolean> result; |
+ Handle<Object> result; |
if (it->IsElement()) { |
uint32_t index = it->index(); |
v8::IndexedPropertyDeleterCallback deleter = |
v8::ToCData<v8::IndexedPropertyDeleterCallback>(interceptor->deleter()); |
- LOG(isolate, |
- ApiIndexedPropertyAccess("interceptor-indexed-delete", *holder, index)); |
result = args.Call(deleter, index); |
} else if (it->name()->IsSymbol() && !interceptor->can_intercept_symbols()) { |
return Nothing<bool>(); |
@@ -6093,19 +6066,15 @@ Maybe<bool> JSObject::DeletePropertyWithInterceptor(LookupIterator* it, |
v8::GenericNamedPropertyDeleterCallback deleter = |
v8::ToCData<v8::GenericNamedPropertyDeleterCallback>( |
interceptor->deleter()); |
- LOG(isolate, |
- ApiNamedPropertyAccess("interceptor-named-delete", *holder, *name)); |
- result = args.Call(deleter, v8::Utils::ToLocal(name)); |
+ result = args.Call(deleter, name); |
} |
RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Nothing<bool>()); |
- if (result.IsEmpty()) return Nothing<bool>(); |
+ if (result.is_null()) return Nothing<bool>(); |
DCHECK(result->IsBoolean()); |
- Handle<Object> result_internal = v8::Utils::OpenHandle(*result); |
- result_internal->VerifyApiCallResultType(); |
// Rebox CustomArguments::kReturnValueOffset before returning. |
- return Just(result_internal->BooleanValue()); |
+ return Just(result->IsTrue()); |
} |
@@ -8506,7 +8475,7 @@ static Maybe<bool> GetKeysFromInterceptor(Isolate* isolate, |
} |
PropertyCallbackArguments args(isolate, interceptor->data(), *receiver, |
*object, Object::DONT_THROW); |
- v8::Local<v8::Object> result; |
+ Handle<JSObject> result; |
if (!interceptor->enumerator()->IsUndefined()) { |
Callback enum_fun = v8::ToCData<Callback>(interceptor->enumerator()); |
const char* log_tag = type == kIndexed ? "interceptor-indexed-enum" |
@@ -8515,18 +8484,13 @@ static Maybe<bool> GetKeysFromInterceptor(Isolate* isolate, |
result = args.Call(enum_fun); |
} |
RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Nothing<bool>()); |
- if (result.IsEmpty()) return Just(true); |
- DCHECK(v8::Utils::OpenHandle(*result)->IsJSArray() || |
- (v8::Utils::OpenHandle(*result)->IsJSObject() && |
- Handle<JSObject>::cast(v8::Utils::OpenHandle(*result)) |
- ->HasSloppyArgumentsElements())); |
+ if (result.is_null()) return Just(true); |
+ DCHECK(result->IsJSArray() || result->HasSloppyArgumentsElements()); |
// The accumulator takes care of string/symbol filtering. |
if (type == kIndexed) { |
- accumulator->AddElementKeysFromInterceptor( |
- Handle<JSObject>::cast(v8::Utils::OpenHandle(*result))); |
+ accumulator->AddElementKeysFromInterceptor(result); |
} else { |
- accumulator->AddKeys(Handle<JSObject>::cast(v8::Utils::OpenHandle(*result)), |
- DO_NOT_CONVERT); |
+ accumulator->AddKeys(result, DO_NOT_CONVERT); |
} |
return Just(true); |
} |
@@ -16325,7 +16289,7 @@ MaybeHandle<Object> JSObject::GetPropertyWithInterceptor(LookupIterator* it, |
} |
Handle<JSObject> holder = it->GetHolder<JSObject>(); |
- v8::Local<v8::Value> result; |
+ Handle<Object> result; |
PropertyCallbackArguments args(isolate, interceptor->data(), |
*it->GetReceiver(), *holder, |
Object::DONT_THROW); |
@@ -16334,8 +16298,6 @@ MaybeHandle<Object> JSObject::GetPropertyWithInterceptor(LookupIterator* it, |
uint32_t index = it->index(); |
v8::IndexedPropertyGetterCallback getter = |
v8::ToCData<v8::IndexedPropertyGetterCallback>(interceptor->getter()); |
- LOG(isolate, |
- ApiIndexedPropertyAccess("interceptor-indexed-get", *holder, index)); |
result = args.Call(getter, index); |
} else { |
Handle<Name> name = it->name(); |
@@ -16348,18 +16310,14 @@ MaybeHandle<Object> JSObject::GetPropertyWithInterceptor(LookupIterator* it, |
v8::GenericNamedPropertyGetterCallback getter = |
v8::ToCData<v8::GenericNamedPropertyGetterCallback>( |
interceptor->getter()); |
- LOG(isolate, |
- ApiNamedPropertyAccess("interceptor-named-get", *holder, *name)); |
- result = args.Call(getter, v8::Utils::ToLocal(name)); |
+ result = args.Call(getter, name); |
} |
RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
- if (result.IsEmpty()) return isolate->factory()->undefined_value(); |
- Handle<Object> result_internal = v8::Utils::OpenHandle(*result); |
- result_internal->VerifyApiCallResultType(); |
+ if (result.is_null()) return isolate->factory()->undefined_value(); |
*done = true; |
// Rebox handle before return |
- return handle(*result_internal, isolate); |
+ return handle(*result, isolate); |
} |