deps: cherry-pick r21297 from v8 trunk
Changes the return value of PropertyCallbackInfo<T>::This() from Local<Value> back to Local<Object>. See [1] and [2] for background. [1] https://groups.google.com/forum/#!topic/v8-users/wP2UcQ4cBW4 [2] https://codereview.chromium.org/285643008/ Signed-off-by: Fedor Indutny <fedor@indutny.com>
This commit is contained in:
parent
dde590d8b9
commit
5d178188a7
6
deps/v8/include/v8.h
vendored
6
deps/v8/include/v8.h
vendored
@ -2493,7 +2493,7 @@ class PropertyCallbackInfo {
|
|||||||
public:
|
public:
|
||||||
V8_INLINE Isolate* GetIsolate() const;
|
V8_INLINE Isolate* GetIsolate() const;
|
||||||
V8_INLINE Local<Value> Data() 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 Local<Object> Holder() const;
|
||||||
V8_INLINE ReturnValue<T> GetReturnValue() const;
|
V8_INLINE ReturnValue<T> GetReturnValue() const;
|
||||||
// This shouldn't be public, but the arm compiler needs it.
|
// This shouldn't be public, but the arm compiler needs it.
|
||||||
@ -6488,8 +6488,8 @@ Local<Value> PropertyCallbackInfo<T>::Data() const {
|
|||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
Local<Value> PropertyCallbackInfo<T>::This() const {
|
Local<Object> PropertyCallbackInfo<T>::This() const {
|
||||||
return Local<Value>(reinterpret_cast<Value*>(&args_[kThisIndex]));
|
return Local<Object>(reinterpret_cast<Object*>(&args_[kThisIndex]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
24
deps/v8/src/accessors.cc
vendored
24
deps/v8/src/accessors.cc
vendored
@ -20,6 +20,16 @@ namespace v8 {
|
|||||||
namespace internal {
|
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(
|
Handle<AccessorInfo> Accessors::MakeAccessor(
|
||||||
Isolate* isolate,
|
Isolate* isolate,
|
||||||
Handle<String> name,
|
Handle<String> name,
|
||||||
@ -146,7 +156,7 @@ void Accessors::ArrayLengthGetter(
|
|||||||
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
||||||
DisallowHeapAllocation no_allocation;
|
DisallowHeapAllocation no_allocation;
|
||||||
HandleScope scope(isolate);
|
HandleScope scope(isolate);
|
||||||
Object* object = *Utils::OpenHandle(*info.This());
|
Object* object = *GetThisFrom(info);
|
||||||
// Traverse the prototype chain until we reach an array.
|
// Traverse the prototype chain until we reach an array.
|
||||||
JSArray* holder = FindInstanceOf<JSArray>(isolate, object);
|
JSArray* holder = FindInstanceOf<JSArray>(isolate, object);
|
||||||
Object* result;
|
Object* result;
|
||||||
@ -229,7 +239,7 @@ void Accessors::StringLengthGetter(
|
|||||||
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
||||||
DisallowHeapAllocation no_allocation;
|
DisallowHeapAllocation no_allocation;
|
||||||
HandleScope scope(isolate);
|
HandleScope scope(isolate);
|
||||||
Object* value = *Utils::OpenHandle(*info.This());
|
Object* value = *GetThisFrom(info);
|
||||||
Object* result;
|
Object* result;
|
||||||
if (value->IsJSValue()) value = JSValue::cast(value)->value();
|
if (value->IsJSValue()) value = JSValue::cast(value)->value();
|
||||||
if (value->IsString()) {
|
if (value->IsString()) {
|
||||||
@ -824,7 +834,7 @@ void Accessors::FunctionPrototypeGetter(
|
|||||||
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
||||||
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
||||||
HandleScope scope(isolate);
|
HandleScope scope(isolate);
|
||||||
Handle<Object> object = Utils::OpenHandle(*info.This());
|
Handle<Object> object = GetThisFrom(info);
|
||||||
Handle<Object> result = GetFunctionPrototype(isolate, object);
|
Handle<Object> result = GetFunctionPrototype(isolate, object);
|
||||||
info.GetReturnValue().Set(Utils::ToLocal(result));
|
info.GetReturnValue().Set(Utils::ToLocal(result));
|
||||||
}
|
}
|
||||||
@ -864,7 +874,7 @@ void Accessors::FunctionLengthGetter(
|
|||||||
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
||||||
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
||||||
HandleScope scope(isolate);
|
HandleScope scope(isolate);
|
||||||
Handle<Object> object = Utils::OpenHandle(*info.This());
|
Handle<Object> object = GetThisFrom(info);
|
||||||
MaybeHandle<JSFunction> maybe_function;
|
MaybeHandle<JSFunction> maybe_function;
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -922,7 +932,7 @@ void Accessors::FunctionNameGetter(
|
|||||||
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
||||||
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
||||||
HandleScope scope(isolate);
|
HandleScope scope(isolate);
|
||||||
Handle<Object> object = Utils::OpenHandle(*info.This());
|
Handle<Object> object = GetThisFrom(info);
|
||||||
MaybeHandle<JSFunction> maybe_function;
|
MaybeHandle<JSFunction> maybe_function;
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1071,7 +1081,7 @@ void Accessors::FunctionArgumentsGetter(
|
|||||||
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
||||||
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
||||||
HandleScope scope(isolate);
|
HandleScope scope(isolate);
|
||||||
Handle<Object> object = Utils::OpenHandle(*info.This());
|
Handle<Object> object = GetThisFrom(info);
|
||||||
MaybeHandle<JSFunction> maybe_function;
|
MaybeHandle<JSFunction> maybe_function;
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1210,7 +1220,7 @@ void Accessors::FunctionCallerGetter(
|
|||||||
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
const v8::PropertyCallbackInfo<v8::Value>& info) {
|
||||||
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
||||||
HandleScope scope(isolate);
|
HandleScope scope(isolate);
|
||||||
Handle<Object> object = Utils::OpenHandle(*info.This());
|
Handle<Object> object = GetThisFrom(info);
|
||||||
MaybeHandle<JSFunction> maybe_function;
|
MaybeHandle<JSFunction> maybe_function;
|
||||||
{
|
{
|
||||||
DisallowHeapAllocation no_allocation;
|
DisallowHeapAllocation no_allocation;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user