Revert PropertyCallbackInfo::This() signature change from r21022.

This exposed an internal implementation detail, which could be handled
differently.

BUG=v8:3274
LOG=y
R=yangguo@chromium.org

Review URL: https://codereview.chromium.org/285643008

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21297 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 7d4cbcbf
......@@ -2497,7 +2497,7 @@ class PropertyCallbackInfo {
public:
V8_INLINE Isolate* GetIsolate() const;
V8_INLINE Local<Value> Data() const;
V8_INLINE Local<Value> This() const;
V8_INLINE Local<Object> This() const;
V8_INLINE Local<Object> Holder() const;
V8_INLINE ReturnValue<T> GetReturnValue() const;
// This shouldn't be public, but the arm compiler needs it.
......@@ -6483,8 +6483,8 @@ Local<Value> PropertyCallbackInfo<T>::Data() const {
template<typename T>
Local<Value> PropertyCallbackInfo<T>::This() const {
return Local<Value>(reinterpret_cast<Value*>(&args_[kThisIndex]));
Local<Object> PropertyCallbackInfo<T>::This() const {
return Local<Object>(reinterpret_cast<Object*>(&args_[kThisIndex]));
}
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment