| Index: src/accessors.cc
|
| diff --git a/src/accessors.cc b/src/accessors.cc
|
| index 8c8fcdd9993a7899043363524cd428a0d4e5c44a..f219bed3b34999009703c0c073f19fae0ff47c70 100644
|
| --- a/src/accessors.cc
|
| +++ b/src/accessors.cc
|
| @@ -20,6 +20,16 @@ namespace v8 {
|
| namespace internal {
|
|
|
|
|
| +// We have a slight impedance mismatch between the external API and the way we
|
| +// use callbacks internally: Externally, callbacks can only be used with
|
| +// v8::Object, but internally we even have callbacks on entities which are
|
| +// higher in the hierarchy, so we can only return i::Object here, not
|
| +// i::JSObject.
|
| +Handle<Object> GetThisFrom(const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| + return Utils::OpenHandle(*v8::Local<v8::Value>(info.This()));
|
| +}
|
| +
|
| +
|
| Handle<AccessorInfo> Accessors::MakeAccessor(
|
| Isolate* isolate,
|
| Handle<String> name,
|
| @@ -146,7 +156,7 @@ void Accessors::ArrayLengthGetter(
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| DisallowHeapAllocation no_allocation;
|
| HandleScope scope(isolate);
|
| - Object* object = *Utils::OpenHandle(*info.This());
|
| + Object* object = *GetThisFrom(info);
|
| // Traverse the prototype chain until we reach an array.
|
| JSArray* holder = FindInstanceOf<JSArray>(isolate, object);
|
| Object* result;
|
| @@ -229,7 +239,7 @@ void Accessors::StringLengthGetter(
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| DisallowHeapAllocation no_allocation;
|
| HandleScope scope(isolate);
|
| - Object* value = *Utils::OpenHandle(*info.This());
|
| + Object* value = *GetThisFrom(info);
|
| Object* result;
|
| if (value->IsJSValue()) value = JSValue::cast(value)->value();
|
| if (value->IsString()) {
|
| @@ -824,7 +834,7 @@ void Accessors::FunctionPrototypeGetter(
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| - Handle<Object> object = Utils::OpenHandle(*info.This());
|
| + Handle<Object> object = GetThisFrom(info);
|
| Handle<Object> result = GetFunctionPrototype(isolate, object);
|
| info.GetReturnValue().Set(Utils::ToLocal(result));
|
| }
|
| @@ -864,7 +874,7 @@ void Accessors::FunctionLengthGetter(
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| - Handle<Object> object = Utils::OpenHandle(*info.This());
|
| + Handle<Object> object = GetThisFrom(info);
|
| MaybeHandle<JSFunction> maybe_function;
|
|
|
| {
|
| @@ -922,7 +932,7 @@ void Accessors::FunctionNameGetter(
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| - Handle<Object> object = Utils::OpenHandle(*info.This());
|
| + Handle<Object> object = GetThisFrom(info);
|
| MaybeHandle<JSFunction> maybe_function;
|
|
|
| {
|
| @@ -1071,7 +1081,7 @@ void Accessors::FunctionArgumentsGetter(
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| - Handle<Object> object = Utils::OpenHandle(*info.This());
|
| + Handle<Object> object = GetThisFrom(info);
|
| MaybeHandle<JSFunction> maybe_function;
|
|
|
| {
|
| @@ -1210,7 +1220,7 @@ void Accessors::FunctionCallerGetter(
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| HandleScope scope(isolate);
|
| - Handle<Object> object = Utils::OpenHandle(*info.This());
|
| + Handle<Object> object = GetThisFrom(info);
|
| MaybeHandle<JSFunction> maybe_function;
|
| {
|
| DisallowHeapAllocation no_allocation;
|
|
|