| Index: test/cctest/test-api-interceptors.cc
|
| diff --git a/test/cctest/test-api-interceptors.cc b/test/cctest/test-api-interceptors.cc
|
| index 34580296fa0edc1be1da01803cffc9af0e30b327..26092c76a973d1d0ad32f26aca75e50f81b473ea 100644
|
| --- a/test/cctest/test-api-interceptors.cc
|
| +++ b/test/cctest/test-api-interceptors.cc
|
| @@ -2,6 +2,9 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +// TODO(jochen): Remove this after the setting is turned on globally.
|
| +#define V8_IMMINENT_DEPRECATION_WARNINGS
|
| +
|
| #include <stdlib.h>
|
|
|
| #include "test/cctest/test-api.h"
|
| @@ -24,7 +27,6 @@ using ::v8::Context;
|
| using ::v8::Extension;
|
| using ::v8::Function;
|
| using ::v8::FunctionTemplate;
|
| -using ::v8::Handle;
|
| using ::v8::HandleScope;
|
| using ::v8::Local;
|
| using ::v8::Name;
|
| @@ -69,15 +71,18 @@ void EmptyInterceptorSetter(Local<Name> name, Local<Value> value,
|
|
|
| void SimpleAccessorGetter(Local<String> name,
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| - Handle<Object> self = Handle<Object>::Cast(info.This());
|
| - info.GetReturnValue().Set(
|
| - self->Get(String::Concat(v8_str("accessor_"), name)));
|
| + Local<Object> self = Local<Object>::Cast(info.This());
|
| + info.GetReturnValue().Set(self->Get(info.GetIsolate()->GetCurrentContext(),
|
| + String::Concat(v8_str("accessor_"), name))
|
| + .ToLocalChecked());
|
| }
|
|
|
| void SimpleAccessorSetter(Local<String> name, Local<Value> value,
|
| const v8::PropertyCallbackInfo<void>& info) {
|
| - Handle<Object> self = Handle<Object>::Cast(info.This());
|
| - self->Set(String::Concat(v8_str("accessor_"), name), value);
|
| + Local<Object> self = Local<Object>::Cast(info.This());
|
| + self->Set(info.GetIsolate()->GetCurrentContext(),
|
| + String::Concat(v8_str("accessor_"), name), value)
|
| + .FromJust();
|
| }
|
|
|
|
|
| @@ -108,7 +113,7 @@ void StringInterceptorGetter(
|
| for (i = 0; name_str[i] && prefix[i]; ++i) {
|
| if (name_str[i] != prefix[i]) return;
|
| }
|
| - Handle<Object> self = Handle<Object>::Cast(info.This());
|
| + Local<Object> self = Local<Object>::Cast(info.This());
|
| info.GetReturnValue().Set(
|
| self->GetPrivate(
|
| info.GetIsolate()->GetCurrentContext(),
|
| @@ -130,10 +135,10 @@ void StringInterceptorSetter(Local<String> name, Local<Value> value,
|
| }
|
| if (!prefix[i]) return;
|
|
|
| - if (value->IsInt32() && value->Int32Value() < 10000) {
|
| - Handle<Object> self = Handle<Object>::Cast(info.This());
|
| - Handle<Context> context = info.GetIsolate()->GetCurrentContext();
|
| - Handle<v8::Private> symbol = v8::Private::ForApi(info.GetIsolate(), name);
|
| + Local<Context> context = info.GetIsolate()->GetCurrentContext();
|
| + if (value->IsInt32() && value->Int32Value(context).FromJust() < 10000) {
|
| + Local<Object> self = Local<Object>::Cast(info.This());
|
| + Local<v8::Private> symbol = v8::Private::ForApi(info.GetIsolate(), name);
|
| self->SetPrivate(context, symbol, value).FromJust();
|
| info.GetReturnValue().Set(value);
|
| }
|
| @@ -166,8 +171,9 @@ void GenericInterceptorGetter(Local<Name> generic_name,
|
| str = String::Concat(v8_str("_str_"), name);
|
| }
|
|
|
| - Handle<Object> self = Handle<Object>::Cast(info.This());
|
| - info.GetReturnValue().Set(self->Get(str));
|
| + Local<Object> self = Local<Object>::Cast(info.This());
|
| + info.GetReturnValue().Set(
|
| + self->Get(info.GetIsolate()->GetCurrentContext(), str).ToLocalChecked());
|
| }
|
|
|
| void GenericInterceptorSetter(Local<Name> generic_name, Local<Value> value,
|
| @@ -185,31 +191,31 @@ void GenericInterceptorSetter(Local<Name> generic_name, Local<Value> value,
|
| str = String::Concat(v8_str("_str_"), name);
|
| }
|
|
|
| - Handle<Object> self = Handle<Object>::Cast(info.This());
|
| - self->Set(str, value);
|
| + Local<Object> self = Local<Object>::Cast(info.This());
|
| + self->Set(info.GetIsolate()->GetCurrentContext(), str, value).FromJust();
|
| info.GetReturnValue().Set(value);
|
| }
|
|
|
| -void AddAccessor(Handle<FunctionTemplate> templ, Handle<String> name,
|
| +void AddAccessor(Local<FunctionTemplate> templ, Local<String> name,
|
| v8::AccessorGetterCallback getter,
|
| v8::AccessorSetterCallback setter) {
|
| templ->PrototypeTemplate()->SetAccessor(name, getter, setter);
|
| }
|
|
|
| -void AddInterceptor(Handle<FunctionTemplate> templ,
|
| +void AddInterceptor(Local<FunctionTemplate> templ,
|
| v8::NamedPropertyGetterCallback getter,
|
| v8::NamedPropertySetterCallback setter) {
|
| templ->InstanceTemplate()->SetNamedPropertyHandler(getter, setter);
|
| }
|
|
|
|
|
| -void AddAccessor(Handle<FunctionTemplate> templ, Handle<Name> name,
|
| +void AddAccessor(Local<FunctionTemplate> templ, Local<Name> name,
|
| v8::AccessorNameGetterCallback getter,
|
| v8::AccessorNameSetterCallback setter) {
|
| templ->PrototypeTemplate()->SetAccessor(name, getter, setter);
|
| }
|
|
|
| -void AddInterceptor(Handle<FunctionTemplate> templ,
|
| +void AddInterceptor(Local<FunctionTemplate> templ,
|
| v8::GenericNamedPropertyGetterCallback getter,
|
| v8::GenericNamedPropertySetterCallback setter) {
|
| templ->InstanceTemplate()->SetHandler(
|
| @@ -217,20 +223,24 @@ void AddInterceptor(Handle<FunctionTemplate> templ,
|
| }
|
|
|
|
|
| -v8::Handle<v8::Object> bottom;
|
| +v8::Local<v8::Object> bottom;
|
|
|
| void CheckThisIndexedPropertyHandler(
|
| uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyHandler));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
| void CheckThisNamedPropertyHandler(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyHandler));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
| void CheckThisIndexedPropertySetter(
|
| @@ -238,7 +248,9 @@ void CheckThisIndexedPropertySetter(
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertySetter));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -247,14 +259,18 @@ void CheckThisNamedPropertySetter(
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertySetter));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
| void CheckThisIndexedPropertyQuery(
|
| uint32_t index, const v8::PropertyCallbackInfo<v8::Integer>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyQuery));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -262,7 +278,9 @@ void CheckThisNamedPropertyQuery(
|
| Local<Name> property, const v8::PropertyCallbackInfo<v8::Integer>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyQuery));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -270,7 +288,9 @@ void CheckThisIndexedPropertyDeleter(
|
| uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyDeleter));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -278,7 +298,9 @@ void CheckThisNamedPropertyDeleter(
|
| Local<Name> property, const v8::PropertyCallbackInfo<v8::Boolean>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyDeleter));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -286,7 +308,9 @@ void CheckThisIndexedPropertyEnumerator(
|
| const v8::PropertyCallbackInfo<v8::Array>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyEnumerator));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -294,7 +318,9 @@ void CheckThisNamedPropertyEnumerator(
|
| const v8::PropertyCallbackInfo<v8::Array>& info) {
|
| CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyEnumerator));
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(info.This()->Equals(bottom));
|
| + CHECK(info.This()
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), bottom)
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -304,7 +330,9 @@ int echo_named_call_count;
|
| void EchoNamedProperty(Local<Name> name,
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(v8_str("data")->Equals(info.Data()));
|
| + CHECK(v8_str("data")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), info.Data())
|
| + .FromJust());
|
| echo_named_call_count++;
|
| info.GetReturnValue().Set(name);
|
| }
|
| @@ -331,20 +359,23 @@ THREADED_TEST(InterceptorHasOwnProperty) {
|
| Local<v8::ObjectTemplate> instance_templ = fun_templ->InstanceTemplate();
|
| instance_templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorHasOwnPropertyGetter));
|
| - Local<Function> function = fun_templ->GetFunction();
|
| - context->Global()->Set(v8_str("constructor"), function);
|
| - v8::Handle<Value> value = CompileRun(
|
| + Local<Function> function =
|
| + fun_templ->GetFunction(context.local()).ToLocalChecked();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("constructor"), function)
|
| + .FromJust();
|
| + v8::Local<Value> value = CompileRun(
|
| "var o = new constructor();"
|
| "o.hasOwnProperty('ostehaps');");
|
| - CHECK_EQ(false, value->BooleanValue());
|
| + CHECK_EQ(false, value->BooleanValue(context.local()).FromJust());
|
| value = CompileRun(
|
| "o.ostehaps = 42;"
|
| "o.hasOwnProperty('ostehaps');");
|
| - CHECK_EQ(true, value->BooleanValue());
|
| + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust());
|
| value = CompileRun(
|
| "var p = new constructor();"
|
| "p.hasOwnProperty('ostehaps');");
|
| - CHECK_EQ(false, value->BooleanValue());
|
| + CHECK_EQ(false, value->BooleanValue(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -356,8 +387,11 @@ THREADED_TEST(InterceptorHasOwnPropertyCausingGC) {
|
| Local<v8::ObjectTemplate> instance_templ = fun_templ->InstanceTemplate();
|
| instance_templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorHasOwnPropertyGetterGC));
|
| - Local<Function> function = fun_templ->GetFunction();
|
| - context->Global()->Set(v8_str("constructor"), function);
|
| + Local<Function> function =
|
| + fun_templ->GetFunction(context.local()).ToLocalChecked();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("constructor"), function)
|
| + .FromJust();
|
| // Let's first make some stuff so we can be sure to get a good GC.
|
| CompileRun(
|
| "function makestr(size) {"
|
| @@ -371,11 +405,11 @@ THREADED_TEST(InterceptorHasOwnPropertyCausingGC) {
|
| "var x = makestr(12345);"
|
| "x = makestr(31415);"
|
| "x = makestr(23456);");
|
| - v8::Handle<Value> value = CompileRun(
|
| + v8::Local<Value> value = CompileRun(
|
| "var o = new constructor();"
|
| "o.__proto__ = new String(x);"
|
| "o.hasOwnProperty('ostehaps');");
|
| - CHECK_EQ(false, value->BooleanValue());
|
| + CHECK_EQ(false, value->BooleanValue(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -384,13 +418,16 @@ static void CheckInterceptorLoadIC(
|
| int expected) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(getter, 0, 0, 0, 0,
|
| v8_str("data")));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - v8::Handle<Value> value = CompileRun(source);
|
| - CHECK_EQ(expected, value->Int32Value());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<Value> value = CompileRun(source);
|
| + CHECK_EQ(expected, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -399,8 +436,9 @@ static void InterceptorLoadICGetter(
|
| ApiTestFuzzer::Fuzz();
|
| v8::Isolate* isolate = CcTest::isolate();
|
| CHECK_EQ(isolate, info.GetIsolate());
|
| - CHECK(v8_str("data")->Equals(info.Data()));
|
| - CHECK(v8_str("x")->Equals(name));
|
| + v8::Local<v8::Context> context = isolate->GetCurrentContext();
|
| + CHECK(v8_str("data")->Equals(context, info.Data()).FromJust());
|
| + CHECK(v8_str("x")->Equals(context, name).FromJust());
|
| info.GetReturnValue().Set(v8::Integer::New(isolate, 42));
|
| }
|
|
|
| @@ -424,9 +462,11 @@ static void InterceptorLoadXICGetter(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| info.GetReturnValue().Set(
|
| - v8_str("x")->Equals(name)
|
| - ? v8::Handle<v8::Value>(v8::Integer::New(info.GetIsolate(), 42))
|
| - : v8::Handle<v8::Value>());
|
| + v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust()
|
| + ? v8::Local<v8::Value>(v8::Integer::New(info.GetIsolate(), 42))
|
| + : v8::Local<v8::Value>());
|
| }
|
|
|
|
|
| @@ -592,28 +632,33 @@ THREADED_TEST(InterceptorLoadICInvalidatedFieldViaGlobal) {
|
|
|
| static void SetOnThis(Local<String> name, Local<Value> value,
|
| const v8::PropertyCallbackInfo<void>& info) {
|
| - Local<Object>::Cast(info.This())->ForceSet(name, value);
|
| + Local<Object>::Cast(info.This())
|
| + ->CreateDataProperty(info.GetIsolate()->GetCurrentContext(), name, value)
|
| + .FromJust();
|
| }
|
|
|
|
|
| THREADED_TEST(InterceptorLoadICWithCallbackOnHolder) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorLoadXICGetter));
|
| templ->SetAccessor(v8_str("y"), Return239Callback);
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| // Check the case when receiver and interceptor's holder
|
| // are the same objects.
|
| - v8::Handle<Value> value = CompileRun(
|
| + v8::Local<Value> value = CompileRun(
|
| "var result = 0;"
|
| "for (var i = 0; i < 7; i++) {"
|
| " result = o.y;"
|
| "}");
|
| - CHECK_EQ(239, value->Int32Value());
|
| + CHECK_EQ(239, value->Int32Value(context.local()).FromJust());
|
|
|
| // Check the case when interceptor's holder is in proto chain
|
| // of receiver.
|
| @@ -623,32 +668,38 @@ THREADED_TEST(InterceptorLoadICWithCallbackOnHolder) {
|
| "for (var i = 0; i < 7; i++) {"
|
| " result = r.y;"
|
| "}");
|
| - CHECK_EQ(239, value->Int32Value());
|
| + CHECK_EQ(239, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| THREADED_TEST(InterceptorLoadICWithCallbackOnProto) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| templ_o->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorLoadXICGetter));
|
| - v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_p = ObjectTemplate::New(isolate);
|
| templ_p->SetAccessor(v8_str("y"), Return239Callback);
|
|
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ_o->NewInstance());
|
| - context->Global()->Set(v8_str("p"), templ_p->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ_o->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("p"),
|
| + templ_p->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| // Check the case when receiver and interceptor's holder
|
| // are the same objects.
|
| - v8::Handle<Value> value = CompileRun(
|
| + v8::Local<Value> value = CompileRun(
|
| "o.__proto__ = p;"
|
| "var result = 0;"
|
| "for (var i = 0; i < 7; i++) {"
|
| " result = o.x + o.y;"
|
| "}");
|
| - CHECK_EQ(239 + 42, value->Int32Value());
|
| + CHECK_EQ(239 + 42, value->Int32Value(context.local()).FromJust());
|
|
|
| // Check the case when interceptor's holder is in proto chain
|
| // of receiver.
|
| @@ -658,22 +709,25 @@ THREADED_TEST(InterceptorLoadICWithCallbackOnProto) {
|
| "for (var i = 0; i < 7; i++) {"
|
| " result = r.x + r.y;"
|
| "}");
|
| - CHECK_EQ(239 + 42, value->Int32Value());
|
| + CHECK_EQ(239 + 42, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| THREADED_TEST(InterceptorLoadICForCallbackWithOverride) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorLoadXICGetter));
|
| templ->SetAccessor(v8_str("y"), Return239Callback);
|
|
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| - v8::Handle<Value> value = CompileRun(
|
| + v8::Local<Value> value = CompileRun(
|
| "fst = new Object(); fst.__proto__ = o;"
|
| "snd = new Object(); snd.__proto__ = fst;"
|
| "var result1 = 0;"
|
| @@ -686,7 +740,7 @@ THREADED_TEST(InterceptorLoadICForCallbackWithOverride) {
|
| " result = snd.x;"
|
| "}"
|
| "result + result1");
|
| - CHECK_EQ(239 + 42, value->Int32Value());
|
| + CHECK_EQ(239 + 42, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -695,17 +749,23 @@ THREADED_TEST(InterceptorLoadICForCallbackWithOverride) {
|
| THREADED_TEST(InterceptorLoadICCallbackNotNeeded) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| templ_o->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorLoadXICGetter));
|
| - v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_p = ObjectTemplate::New(isolate);
|
| templ_p->SetAccessor(v8_str("y"), Return239Callback);
|
|
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ_o->NewInstance());
|
| - context->Global()->Set(v8_str("p"), templ_p->NewInstance());
|
| -
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ_o->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("p"),
|
| + templ_p->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| +
|
| + v8::Local<Value> value = CompileRun(
|
| "o.__proto__ = p;"
|
| "for (var i = 0; i < 7; i++) {"
|
| " o.x;"
|
| @@ -716,7 +776,7 @@ THREADED_TEST(InterceptorLoadICCallbackNotNeeded) {
|
| " result += o.x;"
|
| "}"
|
| "result");
|
| - CHECK_EQ(42 * 7, value->Int32Value());
|
| + CHECK_EQ(42 * 7, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -725,17 +785,23 @@ THREADED_TEST(InterceptorLoadICCallbackNotNeeded) {
|
| THREADED_TEST(InterceptorLoadICInvalidatedCallback) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| templ_o->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorLoadXICGetter));
|
| - v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_p = ObjectTemplate::New(isolate);
|
| templ_p->SetAccessor(v8_str("y"), Return239Callback, SetOnThis);
|
|
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ_o->NewInstance());
|
| - context->Global()->Set(v8_str("p"), templ_p->NewInstance());
|
| -
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ_o->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("p"),
|
| + templ_p->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| +
|
| + v8::Local<Value> value = CompileRun(
|
| "inbetween = new Object();"
|
| "o.__proto__ = inbetween;"
|
| "inbetween.__proto__ = p;"
|
| @@ -749,7 +815,7 @@ THREADED_TEST(InterceptorLoadICInvalidatedCallback) {
|
| " result += o.y;"
|
| "}"
|
| "result");
|
| - CHECK_EQ(42 * 10, value->Int32Value());
|
| + CHECK_EQ(42 * 10, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -759,17 +825,23 @@ THREADED_TEST(InterceptorLoadICInvalidatedCallback) {
|
| THREADED_TEST(InterceptorLoadICInvalidatedCallbackViaGlobal) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| templ_o->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorLoadXICGetter));
|
| - v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_p = ObjectTemplate::New(isolate);
|
| templ_p->SetAccessor(v8_str("y"), Return239Callback, SetOnThis);
|
|
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ_o->NewInstance());
|
| - context->Global()->Set(v8_str("p"), templ_p->NewInstance());
|
| -
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ_o->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("p"),
|
| + templ_p->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| +
|
| + v8::Local<Value> value = CompileRun(
|
| "o.__proto__ = this;"
|
| "this.__proto__ = p;"
|
| "for (var i = 0; i < 10; i++) {"
|
| @@ -782,14 +854,16 @@ THREADED_TEST(InterceptorLoadICInvalidatedCallbackViaGlobal) {
|
| " result += o.y;"
|
| "}"
|
| "result");
|
| - CHECK_EQ(42 * 10, value->Int32Value());
|
| + CHECK_EQ(42 * 10, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| static void InterceptorLoadICGetter0(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(v8_str("x")->Equals(name));
|
| + CHECK(v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust());
|
| info.GetReturnValue().Set(v8::Integer::New(info.GetIsolate(), 0));
|
| }
|
|
|
| @@ -803,8 +877,9 @@ THREADED_TEST(InterceptorReturningZero) {
|
| static void InterceptorStoreICSetter(
|
| Local<Name> key, Local<Value> value,
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| - CHECK(v8_str("x")->Equals(key));
|
| - CHECK_EQ(42, value->Int32Value());
|
| + v8::Local<v8::Context> context = info.GetIsolate()->GetCurrentContext();
|
| + CHECK(v8_str("x")->Equals(context, key).FromJust());
|
| + CHECK_EQ(42, value->Int32Value(context).FromJust());
|
| info.GetReturnValue().Set(value);
|
| }
|
|
|
| @@ -813,12 +888,15 @@ static void InterceptorStoreICSetter(
|
| THREADED_TEST(InterceptorStoreIC) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(
|
| InterceptorLoadICGetter, InterceptorStoreICSetter, 0, 0, 0,
|
| v8_str("data")));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "for (var i = 0; i < 1000; i++) {"
|
| " o.x = 42;"
|
| @@ -829,30 +907,36 @@ THREADED_TEST(InterceptorStoreIC) {
|
| THREADED_TEST(InterceptorStoreICWithNoSetter) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorLoadXICGetter));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<Value> value = CompileRun(
|
| "for (var i = 0; i < 1000; i++) {"
|
| " o.y = 239;"
|
| "}"
|
| "42 + o.y");
|
| - CHECK_EQ(239 + 42, value->Int32Value());
|
| + CHECK_EQ(239 + 42, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| THREADED_TEST(EmptyInterceptorDoesNotShadowAccessors) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| child->Inherit(parent);
|
| AddAccessor(parent, v8_str("age"), SimpleAccessorGetter,
|
| SimpleAccessorSetter);
|
| AddInterceptor(child, EmptyInterceptorGetter, EmptyInterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "child.age = 10;");
|
| @@ -866,16 +950,19 @@ THREADED_TEST(LegacyInterceptorDoesNotSeeSymbols) {
|
| LocalContext env;
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| v8::Local<v8::Symbol> age = v8::Symbol::New(isolate, v8_str("age"));
|
|
|
| child->Inherit(parent);
|
| AddAccessor(parent, age, SymbolAccessorGetter, SymbolAccessorSetter);
|
| AddInterceptor(child, StringInterceptorGetter, StringInterceptorSetter);
|
|
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| - env->Global()->Set(v8_str("age"), age);
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| + env->Global()->Set(env.local(), v8_str("age"), age).FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "child[age] = 10;");
|
| @@ -889,8 +976,8 @@ THREADED_TEST(GenericInterceptorDoesSeeSymbols) {
|
| LocalContext env;
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| v8::Local<v8::Symbol> age = v8::Symbol::New(isolate, v8_str("age"));
|
| v8::Local<v8::Symbol> anon = v8::Symbol::New(isolate);
|
|
|
| @@ -898,9 +985,12 @@ THREADED_TEST(GenericInterceptorDoesSeeSymbols) {
|
| AddAccessor(parent, age, SymbolAccessorGetter, SymbolAccessorSetter);
|
| AddInterceptor(child, GenericInterceptorGetter, GenericInterceptorSetter);
|
|
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| - env->Global()->Set(v8_str("age"), age);
|
| - env->Global()->Set(v8_str("anon"), anon);
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| + env->Global()->Set(env.local(), v8_str("age"), age).FromJust();
|
| + env->Global()->Set(env.local(), v8_str("anon"), anon).FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "child[age] = 10;");
|
| @@ -921,23 +1011,40 @@ THREADED_TEST(GenericInterceptorDoesSeeSymbols) {
|
| THREADED_TEST(NamedPropertyHandlerGetter) {
|
| echo_named_call_count = 0;
|
| v8::HandleScope scope(CcTest::isolate());
|
| - v8::Handle<v8::FunctionTemplate> templ =
|
| + v8::Local<v8::FunctionTemplate> templ =
|
| v8::FunctionTemplate::New(CcTest::isolate());
|
| templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(
|
| EchoNamedProperty, 0, 0, 0, 0, v8_str("data")));
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("obj"), templ->GetFunction()->NewInstance());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local())
|
| + .ToLocalChecked()
|
| + ->NewInstance(env.local())
|
| + .ToLocalChecked())
|
| + .FromJust();
|
| CHECK_EQ(echo_named_call_count, 0);
|
| - v8_compile("obj.x")->Run();
|
| + v8_compile("obj.x")->Run(env.local()).ToLocalChecked();
|
| CHECK_EQ(echo_named_call_count, 1);
|
| const char* code = "var str = 'oddle'; obj[str] + obj.poddle;";
|
| - v8::Handle<Value> str = CompileRun(code);
|
| + v8::Local<Value> str = CompileRun(code);
|
| String::Utf8Value value(str);
|
| CHECK_EQ(0, strcmp(*value, "oddlepoddle"));
|
| // Check default behavior
|
| - CHECK_EQ(10, v8_compile("obj.flob = 10;")->Run()->Int32Value());
|
| - CHECK(v8_compile("'myProperty' in obj")->Run()->BooleanValue());
|
| - CHECK(v8_compile("delete obj.myProperty")->Run()->BooleanValue());
|
| + CHECK_EQ(10, v8_compile("obj.flob = 10;")
|
| + ->Run(env.local())
|
| + .ToLocalChecked()
|
| + ->Int32Value(env.local())
|
| + .FromJust());
|
| + CHECK(v8_compile("'myProperty' in obj")
|
| + ->Run(env.local())
|
| + .ToLocalChecked()
|
| + ->BooleanValue(env.local())
|
| + .FromJust());
|
| + CHECK(v8_compile("delete obj.myProperty")
|
| + ->Run(env.local())
|
| + .ToLocalChecked()
|
| + ->BooleanValue(env.local())
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -947,7 +1054,9 @@ int echo_indexed_call_count = 0;
|
| static void EchoIndexedProperty(
|
| uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(v8_num(637)->Equals(info.Data()));
|
| + CHECK(v8_num(637)
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), info.Data())
|
| + .FromJust());
|
| echo_indexed_call_count++;
|
| info.GetReturnValue().Set(v8_num(index));
|
| }
|
| @@ -956,13 +1065,22 @@ static void EchoIndexedProperty(
|
| THREADED_TEST(IndexedPropertyHandlerGetter) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate);
|
| + v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate);
|
| templ->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(
|
| EchoIndexedProperty, 0, 0, 0, 0, v8_num(637)));
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("obj"), templ->GetFunction()->NewInstance());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local())
|
| + .ToLocalChecked()
|
| + ->NewInstance(env.local())
|
| + .ToLocalChecked())
|
| + .FromJust();
|
| Local<Script> script = v8_compile("obj[900]");
|
| - CHECK_EQ(script->Run()->Int32Value(), 900);
|
| + CHECK_EQ(script->Run(env.local())
|
| + .ToLocalChecked()
|
| + ->Int32Value(env.local())
|
| + .FromJust(),
|
| + 900);
|
| }
|
|
|
|
|
| @@ -972,7 +1090,7 @@ THREADED_TEST(PropertyHandlerInPrototype) {
|
| v8::HandleScope scope(isolate);
|
|
|
| // Set up a prototype chain with three interceptors.
|
| - v8::Handle<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate);
|
| + v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate);
|
| templ->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration(
|
| CheckThisIndexedPropertyHandler, CheckThisIndexedPropertySetter,
|
| CheckThisIndexedPropertyQuery, CheckThisIndexedPropertyDeleter,
|
| @@ -983,13 +1101,22 @@ THREADED_TEST(PropertyHandlerInPrototype) {
|
| CheckThisNamedPropertyQuery, CheckThisNamedPropertyDeleter,
|
| CheckThisNamedPropertyEnumerator));
|
|
|
| - bottom = templ->GetFunction()->NewInstance();
|
| - Local<v8::Object> top = templ->GetFunction()->NewInstance();
|
| - Local<v8::Object> middle = templ->GetFunction()->NewInstance();
|
| -
|
| - bottom->SetPrototype(middle);
|
| - middle->SetPrototype(top);
|
| - env->Global()->Set(v8_str("obj"), bottom);
|
| + bottom = templ->GetFunction(env.local())
|
| + .ToLocalChecked()
|
| + ->NewInstance(env.local())
|
| + .ToLocalChecked();
|
| + Local<v8::Object> top = templ->GetFunction(env.local())
|
| + .ToLocalChecked()
|
| + ->NewInstance(env.local())
|
| + .ToLocalChecked();
|
| + Local<v8::Object> middle = templ->GetFunction(env.local())
|
| + .ToLocalChecked()
|
| + ->NewInstance(env.local())
|
| + .ToLocalChecked();
|
| +
|
| + bottom->SetPrototype(env.local(), middle).FromJust();
|
| + middle->SetPrototype(env.local(), top).FromJust();
|
| + env->Global()->Set(env.local(), v8_str("obj"), bottom).FromJust();
|
|
|
| // Indexed and named get.
|
| CompileRun("obj[0]");
|
| @@ -1016,7 +1143,10 @@ bool is_bootstrapping = false;
|
| static void PrePropertyHandlerGet(
|
| Local<Name> key, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - if (!is_bootstrapping && v8_str("pre")->Equals(key)) {
|
| + if (!is_bootstrapping &&
|
| + v8_str("pre")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), key)
|
| + .FromJust()) {
|
| info.GetReturnValue().Set(v8_str("PrePropertyHandler: pre"));
|
| }
|
| }
|
| @@ -1024,7 +1154,10 @@ static void PrePropertyHandlerGet(
|
|
|
| static void PrePropertyHandlerQuery(
|
| Local<Name> key, const v8::PropertyCallbackInfo<v8::Integer>& info) {
|
| - if (!is_bootstrapping && v8_str("pre")->Equals(key)) {
|
| + if (!is_bootstrapping &&
|
| + v8_str("pre")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), key)
|
| + .FromJust()) {
|
| info.GetReturnValue().Set(static_cast<int32_t>(v8::None));
|
| }
|
| }
|
| @@ -1033,28 +1166,33 @@ static void PrePropertyHandlerQuery(
|
| THREADED_TEST(PrePropertyHandler) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::FunctionTemplate> desc = v8::FunctionTemplate::New(isolate);
|
| + v8::Local<v8::FunctionTemplate> desc = v8::FunctionTemplate::New(isolate);
|
| desc->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration(
|
| PrePropertyHandlerGet, 0, PrePropertyHandlerQuery));
|
| is_bootstrapping = true;
|
| LocalContext env(NULL, desc->InstanceTemplate());
|
| is_bootstrapping = false;
|
| CompileRun("var pre = 'Object: pre'; var on = 'Object: on';");
|
| - v8::Handle<Value> result_pre = CompileRun("pre");
|
| - CHECK(v8_str("PrePropertyHandler: pre")->Equals(result_pre));
|
| - v8::Handle<Value> result_on = CompileRun("on");
|
| - CHECK(v8_str("Object: on")->Equals(result_on));
|
| - v8::Handle<Value> result_post = CompileRun("post");
|
| + v8::Local<Value> result_pre = CompileRun("pre");
|
| + CHECK(v8_str("PrePropertyHandler: pre")
|
| + ->Equals(env.local(), result_pre)
|
| + .FromJust());
|
| + v8::Local<Value> result_on = CompileRun("on");
|
| + CHECK(v8_str("Object: on")->Equals(env.local(), result_on).FromJust());
|
| + v8::Local<Value> result_post = CompileRun("post");
|
| CHECK(result_post.IsEmpty());
|
| }
|
|
|
|
|
| THREADED_TEST(EmptyInterceptorBreakTransitions) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddInterceptor(templ, EmptyInterceptorGetter, EmptyInterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Constructor"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Constructor"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var o1 = new Constructor;"
|
| "o1.a = 1;" // Ensure a and x share the descriptor array.
|
| @@ -1069,12 +1207,15 @@ THREADED_TEST(EmptyInterceptorBreakTransitions) {
|
| THREADED_TEST(EmptyInterceptorDoesNotShadowJSAccessors) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| child->Inherit(parent);
|
| AddInterceptor(child, EmptyInterceptorGetter, EmptyInterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "var parent = child.__proto__;"
|
| @@ -1092,14 +1233,17 @@ THREADED_TEST(EmptyInterceptorDoesNotShadowJSAccessors) {
|
| THREADED_TEST(EmptyInterceptorDoesNotShadowApiAccessors) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| auto returns_42 = FunctionTemplate::New(isolate, Returns42);
|
| parent->PrototypeTemplate()->SetAccessorProperty(v8_str("age"), returns_42);
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| child->Inherit(parent);
|
| AddInterceptor(child, EmptyInterceptorGetter, EmptyInterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "var parent = child.__proto__;");
|
| @@ -1119,12 +1263,15 @@ THREADED_TEST(EmptyInterceptorDoesNotShadowApiAccessors) {
|
| THREADED_TEST(EmptyInterceptorDoesNotAffectJSProperties) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(isolate);
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(isolate);
|
| child->Inherit(parent);
|
| AddInterceptor(child, EmptyInterceptorGetter, EmptyInterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "var parent = child.__proto__;"
|
| @@ -1140,11 +1287,14 @@ THREADED_TEST(EmptyInterceptorDoesNotAffectJSProperties) {
|
|
|
| THREADED_TEST(SwitchFromInterceptorToAccessor) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddAccessor(templ, v8_str("age"), SimpleAccessorGetter, SimpleAccessorSetter);
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Obj"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Obj"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var obj = new Obj;"
|
| "function setAge(i){ obj.age = i; };"
|
| @@ -1158,11 +1308,14 @@ THREADED_TEST(SwitchFromInterceptorToAccessor) {
|
|
|
| THREADED_TEST(SwitchFromAccessorToInterceptor) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddAccessor(templ, v8_str("age"), SimpleAccessorGetter, SimpleAccessorSetter);
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Obj"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Obj"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var obj = new Obj;"
|
| "function setAge(i){ obj.age = i; };"
|
| @@ -1176,14 +1329,17 @@ THREADED_TEST(SwitchFromAccessorToInterceptor) {
|
|
|
| THREADED_TEST(SwitchFromInterceptorToAccessorWithInheritance) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| child->Inherit(parent);
|
| AddAccessor(parent, v8_str("age"), SimpleAccessorGetter,
|
| SimpleAccessorSetter);
|
| AddInterceptor(child, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "function setAge(i){ child.age = i; };"
|
| @@ -1197,14 +1353,17 @@ THREADED_TEST(SwitchFromInterceptorToAccessorWithInheritance) {
|
|
|
| THREADED_TEST(SwitchFromAccessorToInterceptorWithInheritance) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| child->Inherit(parent);
|
| AddAccessor(parent, v8_str("age"), SimpleAccessorGetter,
|
| SimpleAccessorSetter);
|
| AddInterceptor(child, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "function setAge(i){ child.age = i; };"
|
| @@ -1218,10 +1377,13 @@ THREADED_TEST(SwitchFromAccessorToInterceptorWithInheritance) {
|
|
|
| THREADED_TEST(SwitchFromInterceptorToJSAccessor) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Obj"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Obj"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var obj = new Obj;"
|
| "function setter(i) { this.accessor_age = i; };"
|
| @@ -1244,10 +1406,13 @@ THREADED_TEST(SwitchFromInterceptorToJSAccessor) {
|
|
|
| THREADED_TEST(SwitchFromJSAccessorToInterceptor) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Obj"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Obj"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var obj = new Obj;"
|
| "function setter(i) { this.accessor_age = i; };"
|
| @@ -1270,12 +1435,15 @@ THREADED_TEST(SwitchFromJSAccessorToInterceptor) {
|
|
|
| THREADED_TEST(SwitchFromInterceptorToProperty) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| child->Inherit(parent);
|
| AddInterceptor(child, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "function setAge(i){ child.age = i; };"
|
| @@ -1289,12 +1457,15 @@ THREADED_TEST(SwitchFromInterceptorToProperty) {
|
|
|
| THREADED_TEST(SwitchFromPropertyToInterceptor) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| - Handle<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> parent = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> child = FunctionTemplate::New(CcTest::isolate());
|
| child->Inherit(parent);
|
| AddInterceptor(child, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Child"), child->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Child"),
|
| + child->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var child = new Child;"
|
| "function setAge(i){ child.age = i; };"
|
| @@ -1328,13 +1499,16 @@ THREADED_TEST(HiddenPropertiesWithInterceptors) {
|
| Local<v8::ObjectTemplate> instance_templ = fun_templ->InstanceTemplate();
|
| instance_templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorForHiddenProperties));
|
| - Local<v8::Function> function = fun_templ->GetFunction();
|
| - Local<v8::Object> obj = function->NewInstance();
|
| + Local<v8::Function> function =
|
| + fun_templ->GetFunction(context.local()).ToLocalChecked();
|
| + Local<v8::Object> obj =
|
| + function->NewInstance(context.local()).ToLocalChecked();
|
| CHECK(obj->SetPrivate(context.local(), key, v8::Integer::New(isolate, 2302))
|
| .FromJust());
|
| - CHECK_EQ(
|
| - 2302,
|
| - obj->GetPrivate(context.local(), key).ToLocalChecked()->Int32Value());
|
| + CHECK_EQ(2302, obj->GetPrivate(context.local(), key)
|
| + .ToLocalChecked()
|
| + ->Int32Value(context.local())
|
| + .FromJust());
|
| CHECK(!interceptor_for_hidden_properties_called);
|
| }
|
|
|
| @@ -1353,11 +1527,14 @@ THREADED_TEST(NamedInterceptorPropertyRead) {
|
| Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(XPropertyGetter));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| Local<Script> script = v8_compile("obj.x");
|
| for (int i = 0; i < 10; i++) {
|
| - Local<Value> result = script->Run();
|
| - CHECK(result->Equals(v8_str("x")));
|
| + Local<Value> result = script->Run(context.local()).ToLocalChecked();
|
| + CHECK(result->Equals(context.local(), v8_str("x")).FromJust());
|
| }
|
| }
|
|
|
| @@ -1369,11 +1546,14 @@ THREADED_TEST(NamedInterceptorDictionaryIC) {
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(XPropertyGetter));
|
| LocalContext context;
|
| // Create an object with a named interceptor.
|
| - context->Global()->Set(v8_str("interceptor_obj"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("interceptor_obj"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| Local<Script> script = v8_compile("interceptor_obj.x");
|
| for (int i = 0; i < 10; i++) {
|
| - Local<Value> result = script->Run();
|
| - CHECK(result->Equals(v8_str("x")));
|
| + Local<Value> result = script->Run(context.local()).ToLocalChecked();
|
| + CHECK(result->Equals(context.local(), v8_str("x")).FromJust());
|
| }
|
| // Create a slow case object and a function accessing a property in
|
| // that slow case object (with dictionary probing in generated
|
| @@ -1389,7 +1569,7 @@ THREADED_TEST(NamedInterceptorDictionaryIC) {
|
| "interceptor_obj.y = 10;"
|
| "delete interceptor_obj.y;"
|
| "get_x(interceptor_obj)");
|
| - CHECK(result->Equals(v8_str("x")));
|
| + CHECK(result->Equals(context.local(), v8_str("x")).FromJust());
|
| }
|
|
|
|
|
| @@ -1402,8 +1582,10 @@ THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) {
|
| Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(XPropertyGetter));
|
| // Create an object with a named interceptor.
|
| - v8::Local<v8::Object> object = templ->NewInstance();
|
| - context1->Global()->Set(v8_str("interceptor_obj"), object);
|
| + v8::Local<v8::Object> object = templ->NewInstance(context1).ToLocalChecked();
|
| + context1->Global()
|
| + ->Set(context1, v8_str("interceptor_obj"), object)
|
| + .FromJust();
|
|
|
| // Force the object into the slow case.
|
| CompileRun(
|
| @@ -1415,7 +1597,9 @@ THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) {
|
| // Introduce the object into a different context.
|
| // Repeat named loads to exercise ICs.
|
| LocalContext context2;
|
| - context2->Global()->Set(v8_str("interceptor_obj"), object);
|
| + context2->Global()
|
| + ->Set(context2.local(), v8_str("interceptor_obj"), object)
|
| + .FromJust();
|
| Local<Value> result = CompileRun(
|
| "function get_x(o) { return o.x; }"
|
| "interceptor_obj.x = 42;"
|
| @@ -1424,7 +1608,7 @@ THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) {
|
| "}"
|
| "get_x(interceptor_obj)");
|
| // Check that the interceptor was actually invoked.
|
| - CHECK(result->Equals(v8_str("x")));
|
| + CHECK(result->Equals(context2.local(), v8_str("x")).FromJust());
|
| }
|
|
|
| // Return to the original context and force some object to the slow case
|
| @@ -1438,9 +1622,11 @@ THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) {
|
| static void SetXOnPrototypeGetter(
|
| Local<Name> property, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| // Set x on the prototype object and do not handle the get request.
|
| - v8::Handle<v8::Value> proto = info.Holder()->GetPrototype();
|
| - proto.As<v8::Object>()->Set(v8_str("x"),
|
| - v8::Integer::New(info.GetIsolate(), 23));
|
| + v8::Local<v8::Value> proto = info.Holder()->GetPrototype();
|
| + proto.As<v8::Object>()
|
| + ->Set(info.GetIsolate()->GetCurrentContext(), v8_str("x"),
|
| + v8::Integer::New(info.GetIsolate(), 23))
|
| + .FromJust();
|
| }
|
|
|
|
|
| @@ -1456,12 +1642,15 @@ THREADED_TEST(NamedInterceptorMapTransitionRead) {
|
| instance_template->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(SetXOnPrototypeGetter));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("F"), function_template->GetFunction());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("F"),
|
| + function_template->GetFunction(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| // Create an instance of F and introduce a map transition for x.
|
| CompileRun("var o = new F(); o.x = 23;");
|
| // Create an instance of F and invoke the getter. The result should be 23.
|
| Local<Value> result = CompileRun("o = new F(); o.x");
|
| - CHECK_EQ(result->Int32Value(), 23);
|
| + CHECK_EQ(result->Int32Value(context.local()).FromJust(), 23);
|
| }
|
|
|
|
|
| @@ -1491,7 +1680,10 @@ THREADED_TEST(IndexedInterceptorWithIndexedAccessor) {
|
| templ->SetHandler(v8::IndexedPropertyHandlerConfiguration(
|
| IndexedPropertyGetter, IndexedPropertySetter));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| Local<Script> getter_script =
|
| v8_compile("obj.__defineGetter__(\"3\", function(){return 5;});obj[3];");
|
| Local<Script> setter_script = v8_compile(
|
| @@ -1503,14 +1695,14 @@ THREADED_TEST(IndexedInterceptorWithIndexedAccessor) {
|
| "obj[39] = 47;"
|
| "obj.foo;"); // This setter should not run, due to the interceptor.
|
| Local<Script> interceptor_getter_script = v8_compile("obj[37];");
|
| - Local<Value> result = getter_script->Run();
|
| - CHECK(v8_num(5)->Equals(result));
|
| - result = setter_script->Run();
|
| - CHECK(v8_num(23)->Equals(result));
|
| - result = interceptor_setter_script->Run();
|
| - CHECK(v8_num(23)->Equals(result));
|
| - result = interceptor_getter_script->Run();
|
| - CHECK(v8_num(625)->Equals(result));
|
| + Local<Value> result = getter_script->Run(context.local()).ToLocalChecked();
|
| + CHECK(v8_num(5)->Equals(context.local(), result).FromJust());
|
| + result = setter_script->Run(context.local()).ToLocalChecked();
|
| + CHECK(v8_num(23)->Equals(context.local(), result).FromJust());
|
| + result = interceptor_setter_script->Run(context.local()).ToLocalChecked();
|
| + CHECK(v8_num(23)->Equals(context.local(), result).FromJust());
|
| + result = interceptor_getter_script->Run(context.local()).ToLocalChecked();
|
| + CHECK(v8_num(625)->Equals(context.local(), result).FromJust());
|
| }
|
|
|
|
|
| @@ -1540,7 +1732,9 @@ void UnboxedDoubleIndexedPropertyEnumerator(
|
| "keys = new Array(); keys[125000] = 1;"
|
| "for(i = 0; i < 80000; i++) { keys[i] = i; };"
|
| "keys.length = 25; keys;");
|
| - Local<Value> result = indexed_property_names_script->Run();
|
| + Local<Value> result =
|
| + indexed_property_names_script->Run(info.GetIsolate()->GetCurrentContext())
|
| + .ToLocalChecked();
|
| info.GetReturnValue().Set(Local<v8::Array>::Cast(result));
|
| }
|
|
|
| @@ -1555,18 +1749,25 @@ THREADED_TEST(IndexedInterceptorUnboxedDoubleWithIndexedAccessor) {
|
| UnboxedDoubleIndexedPropertyGetter, UnboxedDoubleIndexedPropertySetter, 0,
|
| 0, UnboxedDoubleIndexedPropertyEnumerator));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| // When obj is created, force it to be Stored in a FastDoubleArray.
|
| Local<Script> create_unboxed_double_script = v8_compile(
|
| "obj[125000] = 1; for(i = 0; i < 80000; i+=2) { obj[i] = i; } "
|
| "key_count = 0; "
|
| "for (x in obj) {key_count++;};"
|
| "obj;");
|
| - Local<Value> result = create_unboxed_double_script->Run();
|
| - CHECK(result->ToObject(isolate)->HasRealIndexedProperty(2000));
|
| + Local<Value> result =
|
| + create_unboxed_double_script->Run(context.local()).ToLocalChecked();
|
| + CHECK(result->ToObject(context.local())
|
| + .ToLocalChecked()
|
| + ->HasRealIndexedProperty(context.local(), 2000)
|
| + .FromJust());
|
| Local<Script> key_count_check = v8_compile("key_count;");
|
| - result = key_count_check->Run();
|
| - CHECK(v8_num(40013)->Equals(result));
|
| + result = key_count_check->Run(context.local()).ToLocalChecked();
|
| + CHECK(v8_num(40013)->Equals(context.local(), result).FromJust());
|
| }
|
|
|
|
|
| @@ -1579,8 +1780,9 @@ void SloppyArgsIndexedPropertyEnumerator(
|
| "}"
|
| "keys = f(0, 1, 2, 3);"
|
| "keys;");
|
| - Local<Object> result =
|
| - Local<Object>::Cast(indexed_property_names_script->Run());
|
| + Local<Object> result = Local<Object>::Cast(
|
| + indexed_property_names_script->Run(info.GetIsolate()->GetCurrentContext())
|
| + .ToLocalChecked());
|
| // Have to populate the handle manually, as it's not Cast-able.
|
| i::Handle<i::JSReceiver> o =
|
| v8::Utils::OpenHandle<Object, i::JSReceiver>(result);
|
| @@ -1608,12 +1810,16 @@ THREADED_TEST(IndexedInterceptorSloppyArgsWithIndexedAccessor) {
|
| SloppyIndexedPropertyGetter, 0, 0, 0,
|
| SloppyArgsIndexedPropertyEnumerator));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| Local<Script> create_args_script = v8_compile(
|
| "var key_count = 0;"
|
| "for (x in obj) {key_count++;} key_count;");
|
| - Local<Value> result = create_args_script->Run();
|
| - CHECK(v8_num(4)->Equals(result));
|
| + Local<Value> result =
|
| + create_args_script->Run(context.local()).ToLocalChecked();
|
| + CHECK(v8_num(4)->Equals(context.local(), result).FromJust());
|
| }
|
|
|
|
|
| @@ -1631,7 +1837,10 @@ THREADED_TEST(IndexedInterceptorWithGetOwnPropertyDescriptor) {
|
| v8::IndexedPropertyHandlerConfiguration(IdentityIndexedPropertyGetter));
|
|
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| // Check fast object case.
|
| const char* fast_case_code =
|
| @@ -1654,7 +1863,10 @@ THREADED_TEST(IndexedInterceptorWithNoSetter) {
|
| v8::IndexedPropertyHandlerConfiguration(IdentityIndexedPropertyGetter));
|
|
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("obj"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| const char* code =
|
| "try {"
|
| @@ -1687,8 +1899,8 @@ THREADED_TEST(IndexedInterceptorWithAccessorCheck) {
|
| templ->SetAccessCheckCallback(AccessAlwaysBlocked);
|
|
|
| LocalContext context;
|
| - Local<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| + Local<v8::Object> obj = templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
|
|
| const char* code =
|
| "var result = 'PASSED';"
|
| @@ -1714,8 +1926,8 @@ THREADED_TEST(IndexedInterceptorWithDifferentIndices) {
|
| v8::IndexedPropertyHandlerConfiguration(IdentityIndexedPropertyGetter));
|
|
|
| LocalContext context;
|
| - Local<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| + Local<v8::Object> obj = templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
|
|
| const char* code =
|
| "try {"
|
| @@ -1739,8 +1951,8 @@ THREADED_TEST(IndexedInterceptorWithNegativeIndices) {
|
| v8::IndexedPropertyHandlerConfiguration(IdentityIndexedPropertyGetter));
|
|
|
| LocalContext context;
|
| - Local<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| + Local<v8::Object> obj = templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
|
|
| const char* code =
|
| "try {"
|
| @@ -1780,8 +1992,8 @@ THREADED_TEST(IndexedInterceptorWithNotSmiLookup) {
|
| v8::IndexedPropertyHandlerConfiguration(IdentityIndexedPropertyGetter));
|
|
|
| LocalContext context;
|
| - Local<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| + Local<v8::Object> obj = templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
|
|
| const char* code =
|
| "try {"
|
| @@ -1811,8 +2023,8 @@ THREADED_TEST(IndexedInterceptorGoingMegamorphic) {
|
| v8::IndexedPropertyHandlerConfiguration(IdentityIndexedPropertyGetter));
|
|
|
| LocalContext context;
|
| - Local<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| + Local<v8::Object> obj = templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
|
|
| const char* code =
|
| "var original = obj;"
|
| @@ -1843,8 +2055,8 @@ THREADED_TEST(IndexedInterceptorReceiverTurningSmi) {
|
| v8::IndexedPropertyHandlerConfiguration(IdentityIndexedPropertyGetter));
|
|
|
| LocalContext context;
|
| - Local<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| + Local<v8::Object> obj = templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
|
|
| const char* code =
|
| "var original = obj;"
|
| @@ -1875,8 +2087,8 @@ THREADED_TEST(IndexedInterceptorOnProto) {
|
| v8::IndexedPropertyHandlerConfiguration(IdentityIndexedPropertyGetter));
|
|
|
| LocalContext context;
|
| - Local<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| + Local<v8::Object> obj = templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
|
|
| const char* code =
|
| "var o = {__proto__: obj};"
|
| @@ -1903,7 +2115,8 @@ static void NoBlockGetterI(uint32_t index,
|
|
|
| static void PDeleter(Local<Name> name,
|
| const v8::PropertyCallbackInfo<v8::Boolean>& info) {
|
| - if (!name->Equals(v8_str("foo"))) {
|
| + if (!name->Equals(info.GetIsolate()->GetCurrentContext(), v8_str("foo"))
|
| + .FromJust()) {
|
| return; // not intercepted
|
| }
|
|
|
| @@ -1924,37 +2137,66 @@ static void IDeleter(uint32_t index,
|
| THREADED_TEST(Deleter) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
|
| obj->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX, NULL,
|
| NULL, PDeleter, NULL));
|
| obj->SetHandler(v8::IndexedPropertyHandlerConfiguration(
|
| NoBlockGetterI, NULL, NULL, IDeleter, NULL));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("k"), obj->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("k"),
|
| + obj->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "k.foo = 'foo';"
|
| "k.bar = 'bar';"
|
| "k[2] = 2;"
|
| "k[4] = 4;");
|
| - CHECK(v8_compile("delete k.foo")->Run()->IsFalse());
|
| - CHECK(v8_compile("delete k.bar")->Run()->IsTrue());
|
| -
|
| - CHECK(v8_compile("k.foo")->Run()->Equals(v8_str("foo")));
|
| - CHECK(v8_compile("k.bar")->Run()->IsUndefined());
|
| -
|
| - CHECK(v8_compile("delete k[2]")->Run()->IsFalse());
|
| - CHECK(v8_compile("delete k[4]")->Run()->IsTrue());
|
| -
|
| - CHECK(v8_compile("k[2]")->Run()->Equals(v8_num(2)));
|
| - CHECK(v8_compile("k[4]")->Run()->IsUndefined());
|
| + CHECK(v8_compile("delete k.foo")
|
| + ->Run(context.local())
|
| + .ToLocalChecked()
|
| + ->IsFalse());
|
| + CHECK(v8_compile("delete k.bar")
|
| + ->Run(context.local())
|
| + .ToLocalChecked()
|
| + ->IsTrue());
|
| +
|
| + CHECK(v8_compile("k.foo")
|
| + ->Run(context.local())
|
| + .ToLocalChecked()
|
| + ->Equals(context.local(), v8_str("foo"))
|
| + .FromJust());
|
| + CHECK(v8_compile("k.bar")
|
| + ->Run(context.local())
|
| + .ToLocalChecked()
|
| + ->IsUndefined());
|
| +
|
| + CHECK(v8_compile("delete k[2]")
|
| + ->Run(context.local())
|
| + .ToLocalChecked()
|
| + ->IsFalse());
|
| + CHECK(v8_compile("delete k[4]")
|
| + ->Run(context.local())
|
| + .ToLocalChecked()
|
| + ->IsTrue());
|
| +
|
| + CHECK(v8_compile("k[2]")
|
| + ->Run(context.local())
|
| + .ToLocalChecked()
|
| + ->Equals(context.local(), v8_num(2))
|
| + .FromJust());
|
| + CHECK(
|
| + v8_compile("k[4]")->Run(context.local()).ToLocalChecked()->IsUndefined());
|
| }
|
|
|
|
|
| static void GetK(Local<Name> name,
|
| const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - if (name->Equals(v8_str("foo")) || name->Equals(v8_str("bar")) ||
|
| - name->Equals(v8_str("baz"))) {
|
| + v8::Local<v8::Context> context = info.GetIsolate()->GetCurrentContext();
|
| + if (name->Equals(context, v8_str("foo")).FromJust() ||
|
| + name->Equals(context, v8_str("bar")).FromJust() ||
|
| + name->Equals(context, v8_str("baz")).FromJust()) {
|
| info.GetReturnValue().SetUndefined();
|
| }
|
| }
|
| @@ -1969,19 +2211,26 @@ static void IndexedGetK(uint32_t index,
|
|
|
| static void NamedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - v8::Handle<v8::Array> result = v8::Array::New(info.GetIsolate(), 3);
|
| - result->Set(v8::Integer::New(info.GetIsolate(), 0), v8_str("foo"));
|
| - result->Set(v8::Integer::New(info.GetIsolate(), 1), v8_str("bar"));
|
| - result->Set(v8::Integer::New(info.GetIsolate(), 2), v8_str("baz"));
|
| + v8::Local<v8::Array> result = v8::Array::New(info.GetIsolate(), 3);
|
| + v8::Local<v8::Context> context = info.GetIsolate()->GetCurrentContext();
|
| + result->Set(context, v8::Integer::New(info.GetIsolate(), 0), v8_str("foo"))
|
| + .FromJust();
|
| + result->Set(context, v8::Integer::New(info.GetIsolate(), 1), v8_str("bar"))
|
| + .FromJust();
|
| + result->Set(context, v8::Integer::New(info.GetIsolate(), 2), v8_str("baz"))
|
| + .FromJust();
|
| info.GetReturnValue().Set(result);
|
| }
|
|
|
|
|
| static void IndexedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - v8::Handle<v8::Array> result = v8::Array::New(info.GetIsolate(), 2);
|
| - result->Set(v8::Integer::New(info.GetIsolate(), 0), v8_str("0"));
|
| - result->Set(v8::Integer::New(info.GetIsolate(), 1), v8_str("1"));
|
| + v8::Local<v8::Array> result = v8::Array::New(info.GetIsolate(), 2);
|
| + v8::Local<v8::Context> context = info.GetIsolate()->GetCurrentContext();
|
| + result->Set(context, v8::Integer::New(info.GetIsolate(), 0), v8_str("0"))
|
| + .FromJust();
|
| + result->Set(context, v8::Integer::New(info.GetIsolate(), 1), v8_str("1"))
|
| + .FromJust();
|
| info.GetReturnValue().Set(result);
|
| }
|
|
|
| @@ -1989,31 +2238,34 @@ static void IndexedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
|
| THREADED_TEST(Enumerators) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
|
| obj->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(GetK, NULL, NULL, NULL, NamedEnum));
|
| obj->SetHandler(v8::IndexedPropertyHandlerConfiguration(
|
| IndexedGetK, NULL, NULL, NULL, IndexedEnum));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("k"), obj->NewInstance());
|
| - v8::Handle<v8::Array> result = v8::Handle<v8::Array>::Cast(CompileRun(
|
| - "k[10] = 0;"
|
| - "k.a = 0;"
|
| - "k[5] = 0;"
|
| - "k.b = 0;"
|
| - "k[4294967294] = 0;"
|
| - "k.c = 0;"
|
| - "k[4294967295] = 0;"
|
| - "k.d = 0;"
|
| - "k[140000] = 0;"
|
| - "k.e = 0;"
|
| - "k[30000000000] = 0;"
|
| - "k.f = 0;"
|
| - "var result = [];"
|
| - "for (var prop in k) {"
|
| - " result.push(prop);"
|
| - "}"
|
| - "result"));
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("k"),
|
| + obj->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<v8::Array> result =
|
| + v8::Local<v8::Array>::Cast(CompileRun("k[10] = 0;"
|
| + "k.a = 0;"
|
| + "k[5] = 0;"
|
| + "k.b = 0;"
|
| + "k[4294967294] = 0;"
|
| + "k.c = 0;"
|
| + "k[4294967295] = 0;"
|
| + "k.d = 0;"
|
| + "k[140000] = 0;"
|
| + "k.e = 0;"
|
| + "k[30000000000] = 0;"
|
| + "k.f = 0;"
|
| + "var result = [];"
|
| + "for (var prop in k) {"
|
| + " result.push(prop);"
|
| + "}"
|
| + "result"));
|
| // Check that we get all the property names returned including the
|
| // ones from the enumerators in the right order: indexed properties
|
| // in numerical order, indexed interceptor properties, named
|
| @@ -2022,39 +2274,106 @@ THREADED_TEST(Enumerators) {
|
| // documenting our behavior.
|
| CHECK_EQ(17u, result->Length());
|
| // Indexed properties + indexed interceptor properties in numerical order.
|
| - CHECK(v8_str("0")->Equals(result->Get(v8::Integer::New(isolate, 0))));
|
| - CHECK(v8_str("1")->Equals(result->Get(v8::Integer::New(isolate, 1))));
|
| - CHECK(v8_str("5")->Equals(result->Get(v8::Integer::New(isolate, 2))));
|
| - CHECK(v8_str("10")->Equals(result->Get(v8::Integer::New(isolate, 3))));
|
| - CHECK(v8_str("140000")->Equals(result->Get(v8::Integer::New(isolate, 4))));
|
| - CHECK(
|
| - v8_str("4294967294")->Equals(result->Get(v8::Integer::New(isolate, 5))));
|
| + CHECK(v8_str("0")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 0))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("1")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 1))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("5")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 2))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("10")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 3))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("140000")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 4))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("4294967294")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 5))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| // Named properties in insertion order.
|
| - CHECK(v8_str("a")->Equals(result->Get(v8::Integer::New(isolate, 6))));
|
| - CHECK(v8_str("b")->Equals(result->Get(v8::Integer::New(isolate, 7))));
|
| - CHECK(v8_str("c")->Equals(result->Get(v8::Integer::New(isolate, 8))));
|
| - CHECK(
|
| - v8_str("4294967295")->Equals(result->Get(v8::Integer::New(isolate, 9))));
|
| - CHECK(v8_str("d")->Equals(result->Get(v8::Integer::New(isolate, 10))));
|
| - CHECK(v8_str("e")->Equals(result->Get(v8::Integer::New(isolate, 11))));
|
| + CHECK(v8_str("a")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 6))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("b")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 7))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("c")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 8))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("4294967295")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 9))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("d")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 10))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("e")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 11))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| CHECK(v8_str("30000000000")
|
| - ->Equals(result->Get(v8::Integer::New(isolate, 12))));
|
| - CHECK(v8_str("f")->Equals(result->Get(v8::Integer::New(isolate, 13))));
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 12))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("f")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 13))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| // Named interceptor properties.
|
| - CHECK(v8_str("foo")->Equals(result->Get(v8::Integer::New(isolate, 14))));
|
| - CHECK(v8_str("bar")->Equals(result->Get(v8::Integer::New(isolate, 15))));
|
| - CHECK(v8_str("baz")->Equals(result->Get(v8::Integer::New(isolate, 16))));
|
| + CHECK(v8_str("foo")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 14))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("bar")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 15))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("baz")
|
| + ->Equals(context.local(),
|
| + result->Get(context.local(), v8::Integer::New(isolate, 16))
|
| + .ToLocalChecked())
|
| + .FromJust());
|
| }
|
|
|
|
|
| -v8::Handle<Value> call_ic_function;
|
| -v8::Handle<Value> call_ic_function2;
|
| -v8::Handle<Value> call_ic_function3;
|
| +v8::Local<Value> call_ic_function;
|
| +v8::Local<Value> call_ic_function2;
|
| +v8::Local<Value> call_ic_function3;
|
|
|
| static void InterceptorCallICGetter(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(v8_str("x")->Equals(name));
|
| + CHECK(v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust());
|
| info.GetReturnValue().Set(call_ic_function);
|
| }
|
|
|
| @@ -2063,18 +2382,23 @@ static void InterceptorCallICGetter(
|
| THREADED_TEST(InterceptorCallIC) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorCallICGetter));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - call_ic_function = v8_compile("function f(x) { return x + 1; }; f")->Run();
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + call_ic_function = v8_compile("function f(x) { return x + 1; }; f")
|
| + ->Run(context.local())
|
| + .ToLocalChecked();
|
| + v8::Local<Value> value = CompileRun(
|
| "var result = 0;"
|
| "for (var i = 0; i < 1000; i++) {"
|
| " result = o.x(41);"
|
| "}");
|
| - CHECK_EQ(42, value->Int32Value());
|
| + CHECK_EQ(42, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2083,25 +2407,30 @@ THREADED_TEST(InterceptorCallIC) {
|
| THREADED_TEST(InterceptorCallICSeesOthers) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<Value> value = CompileRun(
|
| "o.x = function f(x) { return x + 1; };"
|
| "var result = 0;"
|
| "for (var i = 0; i < 7; i++) {"
|
| " result = o.x(41);"
|
| "}");
|
| - CHECK_EQ(42, value->Int32Value());
|
| + CHECK_EQ(42, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| -static v8::Handle<Value> call_ic_function4;
|
| +static v8::Local<Value> call_ic_function4;
|
| static void InterceptorCallICGetter4(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - CHECK(v8_str("x")->Equals(name));
|
| + CHECK(v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust());
|
| info.GetReturnValue().Set(call_ic_function4);
|
| }
|
|
|
| @@ -2112,19 +2441,24 @@ static void InterceptorCallICGetter4(
|
| THREADED_TEST(InterceptorCallICCacheableNotNeeded) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorCallICGetter4));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - call_ic_function4 = v8_compile("function f(x) { return x - 1; }; f")->Run();
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + call_ic_function4 = v8_compile("function f(x) { return x - 1; }; f")
|
| + ->Run(context.local())
|
| + .ToLocalChecked();
|
| + v8::Local<Value> value = CompileRun(
|
| "Object.getPrototypeOf(o).x = function(x) { return x + 1; };"
|
| "var result = 0;"
|
| "for (var i = 0; i < 1000; i++) {"
|
| " result = o.x(42);"
|
| "}");
|
| - CHECK_EQ(41, value->Int32Value());
|
| + CHECK_EQ(41, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2133,11 +2467,14 @@ THREADED_TEST(InterceptorCallICCacheableNotNeeded) {
|
| THREADED_TEST(InterceptorCallICInvalidatedCacheable) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<Value> value = CompileRun(
|
| "proto1 = new Object();"
|
| "proto2 = new Object();"
|
| "o.__proto__ = proto1;"
|
| @@ -2152,7 +2489,7 @@ THREADED_TEST(InterceptorCallICInvalidatedCacheable) {
|
| "for (var i = 0; i < 7; i++) {"
|
| " result += o.y(42);"
|
| "}");
|
| - CHECK_EQ(41 * 7, value->Int32Value());
|
| + CHECK_EQ(41 * 7, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2161,11 +2498,14 @@ THREADED_TEST(InterceptorCallICInvalidatedCacheable) {
|
| THREADED_TEST(InterceptorCallICConstantFunctionUsed) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<Value> value = CompileRun(
|
| "function inc(x) { return x + 1; };"
|
| "inc(1);"
|
| "o.x = inc;"
|
| @@ -2173,15 +2513,18 @@ THREADED_TEST(InterceptorCallICConstantFunctionUsed) {
|
| "for (var i = 0; i < 1000; i++) {"
|
| " result = o.x(42);"
|
| "}");
|
| - CHECK_EQ(43, value->Int32Value());
|
| + CHECK_EQ(43, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| -static v8::Handle<Value> call_ic_function5;
|
| +static v8::Local<Value> call_ic_function5;
|
| static void InterceptorCallICGetter5(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - if (v8_str("x")->Equals(name)) info.GetReturnValue().Set(call_ic_function5);
|
| + if (v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust())
|
| + info.GetReturnValue().Set(call_ic_function5);
|
| }
|
|
|
|
|
| @@ -2191,13 +2534,18 @@ static void InterceptorCallICGetter5(
|
| THREADED_TEST(InterceptorCallICConstantFunctionNotNeeded) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorCallICGetter5));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - call_ic_function5 = v8_compile("function f(x) { return x - 1; }; f")->Run();
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + call_ic_function5 = v8_compile("function f(x) { return x - 1; }; f")
|
| + ->Run(context.local())
|
| + .ToLocalChecked();
|
| + v8::Local<Value> value = CompileRun(
|
| "function inc(x) { return x + 1; };"
|
| "inc(1);"
|
| "o.x = inc;"
|
| @@ -2205,15 +2553,18 @@ THREADED_TEST(InterceptorCallICConstantFunctionNotNeeded) {
|
| "for (var i = 0; i < 1000; i++) {"
|
| " result = o.x(42);"
|
| "}");
|
| - CHECK_EQ(41, value->Int32Value());
|
| + CHECK_EQ(41, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| -static v8::Handle<Value> call_ic_function6;
|
| +static v8::Local<Value> call_ic_function6;
|
| static void InterceptorCallICGetter6(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - if (v8_str("x")->Equals(name)) info.GetReturnValue().Set(call_ic_function6);
|
| + if (v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust())
|
| + info.GetReturnValue().Set(call_ic_function6);
|
| }
|
|
|
|
|
| @@ -2223,13 +2574,18 @@ THREADED_TEST(InterceptorCallICConstantFunctionNotNeededWrapped) {
|
| i::FLAG_allow_natives_syntax = true;
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorCallICGetter6));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - call_ic_function6 = v8_compile("function f(x) { return x - 1; }; f")->Run();
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + call_ic_function6 = v8_compile("function f(x) { return x - 1; }; f")
|
| + ->Run(context.local())
|
| + .ToLocalChecked();
|
| + v8::Local<Value> value = CompileRun(
|
| "function inc(x) { return x + 1; };"
|
| "inc(1);"
|
| "o.x = inc;"
|
| @@ -2245,7 +2601,7 @@ THREADED_TEST(InterceptorCallICConstantFunctionNotNeededWrapped) {
|
| "test();"
|
| "%OptimizeFunctionOnNextCall(test);"
|
| "test()");
|
| - CHECK_EQ(41, value->Int32Value());
|
| + CHECK_EQ(41, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2254,11 +2610,14 @@ THREADED_TEST(InterceptorCallICConstantFunctionNotNeededWrapped) {
|
| THREADED_TEST(InterceptorCallICInvalidatedConstantFunction) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<Value> value = CompileRun(
|
| "function inc(x) { return x + 1; };"
|
| "inc(1);"
|
| "proto1 = new Object();"
|
| @@ -2275,7 +2634,7 @@ THREADED_TEST(InterceptorCallICInvalidatedConstantFunction) {
|
| "for (var i = 0; i < 7; i++) {"
|
| " result += o.y(42);"
|
| "}");
|
| - CHECK_EQ(41 * 7, value->Int32Value());
|
| + CHECK_EQ(41 * 7, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2285,11 +2644,14 @@ THREADED_TEST(InterceptorCallICInvalidatedConstantFunction) {
|
| THREADED_TEST(InterceptorCallICInvalidatedConstantFunctionViaGlobal) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| - v8::Handle<Value> value = CompileRun(
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<Value> value = CompileRun(
|
| "function inc(x) { return x + 1; };"
|
| "inc(1);"
|
| "o.__proto__ = this;"
|
| @@ -2303,7 +2665,7 @@ THREADED_TEST(InterceptorCallICInvalidatedConstantFunctionViaGlobal) {
|
| "for (var i = 0; i < 7; i++) {"
|
| " result += o.y(42);"
|
| "}");
|
| - CHECK_EQ(41 * 7, value->Int32Value());
|
| + CHECK_EQ(41 * 7, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2311,13 +2673,16 @@ THREADED_TEST(InterceptorCallICInvalidatedConstantFunctionViaGlobal) {
|
| THREADED_TEST(InterceptorCallICCachedFromGlobal) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| templ_o->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
|
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ_o->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ_o->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| - v8::Handle<Value> value = CompileRun(
|
| + v8::Local<Value> value = CompileRun(
|
| "try {"
|
| " o.__proto__ = this;"
|
| " for (var i = 0; i < 10; i++) {"
|
| @@ -2333,16 +2698,18 @@ THREADED_TEST(InterceptorCallICCachedFromGlobal) {
|
| "} catch(e) {"
|
| " e"
|
| "};");
|
| - CHECK_EQ(239 * 10, value->Int32Value());
|
| + CHECK_EQ(239 * 10, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| -v8::Handle<Value> keyed_call_ic_function;
|
| +v8::Local<Value> keyed_call_ic_function;
|
|
|
| static void InterceptorKeyedCallICGetter(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - if (v8_str("x")->Equals(name)) {
|
| + if (v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust()) {
|
| info.GetReturnValue().Set(keyed_call_ic_function);
|
| }
|
| }
|
| @@ -2353,10 +2720,13 @@ static void InterceptorKeyedCallICGetter(
|
| THREADED_TEST(InterceptorKeyedCallICKeyChange1) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "proto = new Object();"
|
| "proto.y = function(x) { return x + 1; };"
|
| @@ -2368,8 +2738,11 @@ THREADED_TEST(InterceptorKeyedCallICKeyChange1) {
|
| " if (i == 5) { method = 'z'; };"
|
| " result += o[method](41);"
|
| "}");
|
| - CHECK_EQ(42 * 5 + 40 * 5,
|
| - context->Global()->Get(v8_str("result"))->Int32Value());
|
| + CHECK_EQ(42 * 5 + 40 * 5, context->Global()
|
| + ->Get(context.local(), v8_str("result"))
|
| + .ToLocalChecked()
|
| + ->Int32Value(context.local())
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -2379,13 +2752,17 @@ THREADED_TEST(InterceptorKeyedCallICKeyChange1) {
|
| THREADED_TEST(InterceptorKeyedCallICKeyChange2) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorKeyedCallICGetter));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("proto1"), templ->NewInstance());
|
| - keyed_call_ic_function =
|
| - v8_compile("function f(x) { return x - 1; }; f")->Run();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("proto1"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + keyed_call_ic_function = v8_compile("function f(x) { return x - 1; }; f")
|
| + ->Run(context.local())
|
| + .ToLocalChecked();
|
| CompileRun(
|
| "o = new Object();"
|
| "proto2 = new Object();"
|
| @@ -2399,8 +2776,11 @@ THREADED_TEST(InterceptorKeyedCallICKeyChange2) {
|
| " if (i == 5) { method = 'y'; };"
|
| " result += o[method](41);"
|
| "}");
|
| - CHECK_EQ(42 * 5 + 40 * 5,
|
| - context->Global()->Get(v8_str("result"))->Int32Value());
|
| + CHECK_EQ(42 * 5 + 40 * 5, context->Global()
|
| + ->Get(context.local(), v8_str("result"))
|
| + .ToLocalChecked()
|
| + ->Int32Value(context.local())
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -2409,10 +2789,13 @@ THREADED_TEST(InterceptorKeyedCallICKeyChange2) {
|
| THREADED_TEST(InterceptorKeyedCallICKeyChangeOnGlobal) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "function inc(x) { return x + 1; };"
|
| "inc(1);"
|
| @@ -2427,8 +2810,11 @@ THREADED_TEST(InterceptorKeyedCallICKeyChangeOnGlobal) {
|
| " if (i == 5) { method = 'y'; };"
|
| " result += o[method](41);"
|
| "}");
|
| - CHECK_EQ(42 * 5 + 40 * 5,
|
| - context->Global()->Get(v8_str("result"))->Int32Value());
|
| + CHECK_EQ(42 * 5 + 40 * 5, context->Global()
|
| + ->Get(context.local(), v8_str("result"))
|
| + .ToLocalChecked()
|
| + ->Int32Value(context.local())
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -2436,10 +2822,13 @@ THREADED_TEST(InterceptorKeyedCallICKeyChangeOnGlobal) {
|
| THREADED_TEST(InterceptorKeyedCallICFromGlobal) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| templ_o->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ_o->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ_o->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| CompileRun(
|
| "function len(x) { return x.length; };"
|
| @@ -2453,8 +2842,16 @@ THREADED_TEST(InterceptorKeyedCallICFromGlobal) {
|
| " };"
|
| " result = o[m]('239');"
|
| "}");
|
| - CHECK_EQ(3, context->Global()->Get(v8_str("result"))->Int32Value());
|
| - CHECK_EQ(239, context->Global()->Get(v8_str("saved_result"))->Int32Value());
|
| + CHECK_EQ(3, context->Global()
|
| + ->Get(context.local(), v8_str("result"))
|
| + .ToLocalChecked()
|
| + ->Int32Value(context.local())
|
| + .FromJust());
|
| + CHECK_EQ(239, context->Global()
|
| + ->Get(context.local(), v8_str("saved_result"))
|
| + .ToLocalChecked()
|
| + ->Int32Value(context.local())
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -2462,10 +2859,13 @@ THREADED_TEST(InterceptorKeyedCallICFromGlobal) {
|
| THREADED_TEST(InterceptorKeyedCallICMapChangeBefore) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| templ_o->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("proto"), templ_o->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("proto"),
|
| + templ_o->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| CompileRun(
|
| "var o = new Object();"
|
| @@ -2477,8 +2877,11 @@ THREADED_TEST(InterceptorKeyedCallICMapChangeBefore) {
|
| " if (i == 5) { o.method = function(x) { return x - 1; }; };"
|
| " result += o[m](41);"
|
| "}");
|
| - CHECK_EQ(42 * 5 + 40 * 5,
|
| - context->Global()->Get(v8_str("result"))->Int32Value());
|
| + CHECK_EQ(42 * 5 + 40 * 5, context->Global()
|
| + ->Get(context.local(), v8_str("result"))
|
| + .ToLocalChecked()
|
| + ->Int32Value(context.local())
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -2486,10 +2889,13 @@ THREADED_TEST(InterceptorKeyedCallICMapChangeBefore) {
|
| THREADED_TEST(InterceptorKeyedCallICMapChangeAfter) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ_o = ObjectTemplate::New(isolate);
|
| templ_o->SetHandler(v8::NamedPropertyHandlerConfiguration(NoBlockGetterX));
|
| LocalContext context;
|
| - context->Global()->Set(v8_str("o"), templ_o->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("o"),
|
| + templ_o->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| CompileRun(
|
| "var proto = new Object();"
|
| @@ -2501,8 +2907,11 @@ THREADED_TEST(InterceptorKeyedCallICMapChangeAfter) {
|
| " if (i == 5) { proto.method = function(x) { return x - 1; }; };"
|
| " result += o[m](41);"
|
| "}");
|
| - CHECK_EQ(42 * 5 + 40 * 5,
|
| - context->Global()->Get(v8_str("result"))->Int32Value());
|
| + CHECK_EQ(42 * 5 + 40 * 5, context->Global()
|
| + ->Get(context.local(), v8_str("result"))
|
| + .ToLocalChecked()
|
| + ->Int32Value(context.local())
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -2511,7 +2920,10 @@ static int interceptor_call_count = 0;
|
| static void InterceptorICRefErrorGetter(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| - if (!is_bootstrapping && v8_str("x")->Equals(name) &&
|
| + if (!is_bootstrapping &&
|
| + v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust() &&
|
| interceptor_call_count++ < 20) {
|
| info.GetReturnValue().Set(call_ic_function2);
|
| }
|
| @@ -2524,14 +2936,16 @@ static void InterceptorICRefErrorGetter(
|
| THREADED_TEST(InterceptorICReferenceErrors) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorICRefErrorGetter));
|
| is_bootstrapping = true;
|
| - LocalContext context(0, templ, v8::Handle<Value>());
|
| + LocalContext context(0, templ, v8::Local<Value>());
|
| is_bootstrapping = false;
|
| - call_ic_function2 = v8_compile("function h(x) { return x; }; h")->Run();
|
| - v8::Handle<Value> value = CompileRun(
|
| + call_ic_function2 = v8_compile("function h(x) { return x; }; h")
|
| + ->Run(context.local())
|
| + .ToLocalChecked();
|
| + v8::Local<Value> value = CompileRun(
|
| "function f() {"
|
| " for (var i = 0; i < 1000; i++) {"
|
| " try { x; } catch(e) { return true; }"
|
| @@ -2539,7 +2953,7 @@ THREADED_TEST(InterceptorICReferenceErrors) {
|
| " return false;"
|
| "};"
|
| "f();");
|
| - CHECK_EQ(true, value->BooleanValue());
|
| + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust());
|
| interceptor_call_count = 0;
|
| value = CompileRun(
|
| "function g() {"
|
| @@ -2549,7 +2963,7 @@ THREADED_TEST(InterceptorICReferenceErrors) {
|
| " return false;"
|
| "};"
|
| "g();");
|
| - CHECK_EQ(true, value->BooleanValue());
|
| + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2559,7 +2973,10 @@ static void InterceptorICExceptionGetter(
|
| Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| if (is_bootstrapping) return;
|
| - if (v8_str("x")->Equals(name) && ++interceptor_ic_exception_get_count < 20) {
|
| + if (v8_str("x")
|
| + ->Equals(info.GetIsolate()->GetCurrentContext(), name)
|
| + .FromJust() &&
|
| + ++interceptor_ic_exception_get_count < 20) {
|
| info.GetReturnValue().Set(call_ic_function3);
|
| }
|
| if (interceptor_ic_exception_get_count == 20) {
|
| @@ -2575,14 +2992,16 @@ THREADED_TEST(InterceptorICGetterExceptions) {
|
| interceptor_ic_exception_get_count = 0;
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorICExceptionGetter));
|
| is_bootstrapping = true;
|
| - LocalContext context(0, templ, v8::Handle<Value>());
|
| + LocalContext context(0, templ, v8::Local<Value>());
|
| is_bootstrapping = false;
|
| - call_ic_function3 = v8_compile("function h(x) { return x; }; h")->Run();
|
| - v8::Handle<Value> value = CompileRun(
|
| + call_ic_function3 = v8_compile("function h(x) { return x; }; h")
|
| + ->Run(context.local())
|
| + .ToLocalChecked();
|
| + v8::Local<Value> value = CompileRun(
|
| "function f() {"
|
| " for (var i = 0; i < 100; i++) {"
|
| " try { x; } catch(e) { return true; }"
|
| @@ -2590,7 +3009,7 @@ THREADED_TEST(InterceptorICGetterExceptions) {
|
| " return false;"
|
| "};"
|
| "f();");
|
| - CHECK_EQ(true, value->BooleanValue());
|
| + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust());
|
| interceptor_ic_exception_get_count = 0;
|
| value = CompileRun(
|
| "function f() {"
|
| @@ -2600,7 +3019,7 @@ THREADED_TEST(InterceptorICGetterExceptions) {
|
| " return false;"
|
| "};"
|
| "f();");
|
| - CHECK_EQ(true, value->BooleanValue());
|
| + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2622,11 +3041,11 @@ THREADED_TEST(InterceptorICSetterExceptions) {
|
| interceptor_ic_exception_set_count = 0;
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(0, InterceptorICExceptionSetter));
|
| - LocalContext context(0, templ, v8::Handle<Value>());
|
| - v8::Handle<Value> value = CompileRun(
|
| + LocalContext context(0, templ, v8::Local<Value>());
|
| + v8::Local<Value> value = CompileRun(
|
| "function f() {"
|
| " for (var i = 0; i < 100; i++) {"
|
| " try { x = 42; } catch(e) { return true; }"
|
| @@ -2634,7 +3053,7 @@ THREADED_TEST(InterceptorICSetterExceptions) {
|
| " return false;"
|
| "};"
|
| "f();");
|
| - CHECK_EQ(true, value->BooleanValue());
|
| + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2642,16 +3061,17 @@ THREADED_TEST(InterceptorICSetterExceptions) {
|
| THREADED_TEST(NullNamedInterceptor) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::NamedPropertyHandlerConfiguration(
|
| static_cast<v8::GenericNamedPropertyGetterCallback>(0)));
|
| LocalContext context;
|
| templ->Set(CcTest::isolate(), "x", v8_num(42));
|
| - v8::Handle<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| - v8::Handle<Value> value = CompileRun("obj.x");
|
| + v8::Local<v8::Object> obj =
|
| + templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
| + v8::Local<Value> value = CompileRun("obj.x");
|
| CHECK(value->IsInt32());
|
| - CHECK_EQ(42, value->Int32Value());
|
| + CHECK_EQ(42, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| @@ -2659,27 +3079,33 @@ THREADED_TEST(NullNamedInterceptor) {
|
| THREADED_TEST(NullIndexedInterceptor) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate);
|
| templ->SetHandler(v8::IndexedPropertyHandlerConfiguration(
|
| static_cast<v8::IndexedPropertyGetterCallback>(0)));
|
| LocalContext context;
|
| templ->Set(CcTest::isolate(), "42", v8_num(42));
|
| - v8::Handle<v8::Object> obj = templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), obj);
|
| - v8::Handle<Value> value = CompileRun("obj[42]");
|
| + v8::Local<v8::Object> obj =
|
| + templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()->Set(context.local(), v8_str("obj"), obj).FromJust();
|
| + v8::Local<Value> value = CompileRun("obj[42]");
|
| CHECK(value->IsInt32());
|
| - CHECK_EQ(42, value->Int32Value());
|
| + CHECK_EQ(42, value->Int32Value(context.local()).FromJust());
|
| }
|
|
|
|
|
| THREADED_TEST(NamedPropertyHandlerGetterAttributes) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
| - v8::Handle<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate);
|
| + v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate);
|
| templ->InstanceTemplate()->SetHandler(
|
| v8::NamedPropertyHandlerConfiguration(InterceptorLoadXICGetter));
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("obj"), templ->GetFunction()->NewInstance());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local())
|
| + .ToLocalChecked()
|
| + ->NewInstance(env.local())
|
| + .ToLocalChecked())
|
| + .FromJust();
|
| ExpectTrue("obj.x === 42");
|
| ExpectTrue("!obj.propertyIsEnumerable('x')");
|
| }
|
| @@ -2689,9 +3115,12 @@ THREADED_TEST(Regress256330) {
|
| i::FLAG_allow_natives_syntax = true;
|
| LocalContext context;
|
| v8::HandleScope scope(context->GetIsolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(context->GetIsolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(context->GetIsolate());
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| - context->Global()->Set(v8_str("Bug"), templ->GetFunction());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("Bug"),
|
| + templ->GetFunction(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "\"use strict\"; var o = new Bug;"
|
| "function f(o) { o.x = 10; };"
|
| @@ -2705,10 +3134,13 @@ THREADED_TEST(Regress256330) {
|
| THREADED_TEST(CrankshaftInterceptorSetter) {
|
| i::FLAG_allow_natives_syntax = true;
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Obj"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Obj"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var obj = new Obj;"
|
| // Initialize fields to avoid transitions later.
|
| @@ -2732,10 +3164,13 @@ THREADED_TEST(CrankshaftInterceptorSetter) {
|
| THREADED_TEST(CrankshaftInterceptorGetter) {
|
| i::FLAG_allow_natives_syntax = true;
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Obj"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Obj"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var obj = new Obj;"
|
| // Initialize fields to avoid transitions later.
|
| @@ -2756,10 +3191,13 @@ THREADED_TEST(CrankshaftInterceptorGetter) {
|
| THREADED_TEST(CrankshaftInterceptorFieldRead) {
|
| i::FLAG_allow_natives_syntax = true;
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Obj"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Obj"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var obj = new Obj;"
|
| "obj.__proto__.interceptor_age = 42;"
|
| @@ -2777,10 +3215,13 @@ THREADED_TEST(CrankshaftInterceptorFieldRead) {
|
| THREADED_TEST(CrankshaftInterceptorFieldWrite) {
|
| i::FLAG_allow_natives_syntax = true;
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(CcTest::isolate());
|
| AddInterceptor(templ, InterceptorGetter, InterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Obj"), templ->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Obj"),
|
| + templ->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var obj = new Obj;"
|
| "obj.age = 100000;"
|
| @@ -2798,19 +3239,25 @@ THREADED_TEST(CrankshaftInterceptorFieldWrite) {
|
| THREADED_TEST(Regress149912) {
|
| LocalContext context;
|
| v8::HandleScope scope(context->GetIsolate());
|
| - Handle<FunctionTemplate> templ = FunctionTemplate::New(context->GetIsolate());
|
| + Local<FunctionTemplate> templ = FunctionTemplate::New(context->GetIsolate());
|
| AddInterceptor(templ, EmptyInterceptorGetter, EmptyInterceptorSetter);
|
| - context->Global()->Set(v8_str("Bug"), templ->GetFunction());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("Bug"),
|
| + templ->GetFunction(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun("Number.prototype.__proto__ = new Bug; var x = 0; x.foo();");
|
| }
|
|
|
|
|
| THREADED_TEST(Regress125988) {
|
| v8::HandleScope scope(CcTest::isolate());
|
| - Handle<FunctionTemplate> intercept = FunctionTemplate::New(CcTest::isolate());
|
| + Local<FunctionTemplate> intercept = FunctionTemplate::New(CcTest::isolate());
|
| AddInterceptor(intercept, EmptyInterceptorGetter, EmptyInterceptorSetter);
|
| LocalContext env;
|
| - env->Global()->Set(v8_str("Intercept"), intercept->GetFunction());
|
| + env->Global()
|
| + ->Set(env.local(), v8_str("Intercept"),
|
| + intercept->GetFunction(env.local()).ToLocalChecked())
|
| + .FromJust();
|
| CompileRun(
|
| "var a = new Object();"
|
| "var b = new Intercept();"
|
| @@ -2833,17 +3280,21 @@ THREADED_TEST(Regress125988) {
|
|
|
| static void IndexedPropertyEnumerator(
|
| const v8::PropertyCallbackInfo<v8::Array>& info) {
|
| - v8::Handle<v8::Array> result = v8::Array::New(info.GetIsolate(), 1);
|
| - result->Set(0, v8::Integer::New(info.GetIsolate(), 7));
|
| + v8::Local<v8::Array> result = v8::Array::New(info.GetIsolate(), 1);
|
| + result->Set(info.GetIsolate()->GetCurrentContext(), 0,
|
| + v8::Integer::New(info.GetIsolate(), 7))
|
| + .FromJust();
|
| info.GetReturnValue().Set(result);
|
| }
|
|
|
|
|
| static void NamedPropertyEnumerator(
|
| const v8::PropertyCallbackInfo<v8::Array>& info) {
|
| - v8::Handle<v8::Array> result = v8::Array::New(info.GetIsolate(), 2);
|
| - result->Set(0, v8_str("x"));
|
| - result->Set(1, v8::Symbol::GetIterator(info.GetIsolate()));
|
| + v8::Local<v8::Array> result = v8::Array::New(info.GetIsolate(), 2);
|
| + v8::Local<v8::Context> context = info.GetIsolate()->GetCurrentContext();
|
| + result->Set(context, 0, v8_str("x")).FromJust();
|
| + result->Set(context, 1, v8::Symbol::GetIterator(info.GetIsolate()))
|
| + .FromJust();
|
| info.GetReturnValue().Set(result);
|
| }
|
|
|
| @@ -2851,8 +3302,7 @@ static void NamedPropertyEnumerator(
|
| THREADED_TEST(GetOwnPropertyNamesWithInterceptor) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope handle_scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> obj_template =
|
| - v8::ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> obj_template = v8::ObjectTemplate::New(isolate);
|
|
|
| obj_template->Set(v8_str("7"), v8::Integer::New(CcTest::isolate(), 7));
|
| obj_template->Set(v8_str("x"), v8::Integer::New(CcTest::isolate(), 42));
|
| @@ -2862,33 +3312,50 @@ THREADED_TEST(GetOwnPropertyNamesWithInterceptor) {
|
| NULL, NULL, NULL, NULL, NamedPropertyEnumerator));
|
|
|
| LocalContext context;
|
| - v8::Handle<v8::Object> global = context->Global();
|
| - global->Set(v8_str("object"), obj_template->NewInstance());
|
| + v8::Local<v8::Object> global = context->Global();
|
| + global->Set(context.local(), v8_str("object"),
|
| + obj_template->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| - v8::Handle<v8::Value> result =
|
| + v8::Local<v8::Value> result =
|
| CompileRun("Object.getOwnPropertyNames(object)");
|
| CHECK(result->IsArray());
|
| - v8::Handle<v8::Array> result_array = v8::Handle<v8::Array>::Cast(result);
|
| + v8::Local<v8::Array> result_array = v8::Local<v8::Array>::Cast(result);
|
| CHECK_EQ(2u, result_array->Length());
|
| - CHECK(result_array->Get(0)->IsString());
|
| - CHECK(result_array->Get(1)->IsString());
|
| - CHECK(v8_str("7")->Equals(result_array->Get(0)));
|
| - CHECK(v8_str("x")->Equals(result_array->Get(1)));
|
| + CHECK(result_array->Get(context.local(), 0).ToLocalChecked()->IsString());
|
| + CHECK(result_array->Get(context.local(), 1).ToLocalChecked()->IsString());
|
| + CHECK(v8_str("7")
|
| + ->Equals(context.local(),
|
| + result_array->Get(context.local(), 0).ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("x")
|
| + ->Equals(context.local(),
|
| + result_array->Get(context.local(), 1).ToLocalChecked())
|
| + .FromJust());
|
|
|
| result = CompileRun("var ret = []; for (var k in object) ret.push(k); ret");
|
| CHECK(result->IsArray());
|
| - result_array = v8::Handle<v8::Array>::Cast(result);
|
| + result_array = v8::Local<v8::Array>::Cast(result);
|
| CHECK_EQ(2u, result_array->Length());
|
| - CHECK(result_array->Get(0)->IsString());
|
| - CHECK(result_array->Get(1)->IsString());
|
| - CHECK(v8_str("7")->Equals(result_array->Get(0)));
|
| - CHECK(v8_str("x")->Equals(result_array->Get(1)));
|
| + CHECK(result_array->Get(context.local(), 0).ToLocalChecked()->IsString());
|
| + CHECK(result_array->Get(context.local(), 1).ToLocalChecked()->IsString());
|
| + CHECK(v8_str("7")
|
| + ->Equals(context.local(),
|
| + result_array->Get(context.local(), 0).ToLocalChecked())
|
| + .FromJust());
|
| + CHECK(v8_str("x")
|
| + ->Equals(context.local(),
|
| + result_array->Get(context.local(), 1).ToLocalChecked())
|
| + .FromJust());
|
|
|
| result = CompileRun("Object.getOwnPropertySymbols(object)");
|
| CHECK(result->IsArray());
|
| - result_array = v8::Handle<v8::Array>::Cast(result);
|
| + result_array = v8::Local<v8::Array>::Cast(result);
|
| CHECK_EQ(1u, result_array->Length());
|
| - CHECK(result_array->Get(0)->Equals(v8::Symbol::GetIterator(isolate)));
|
| + CHECK(result_array->Get(context.local(), 0)
|
| + .ToLocalChecked()
|
| + ->Equals(context.local(), v8::Symbol::GetIterator(isolate))
|
| + .FromJust());
|
| }
|
|
|
|
|
| @@ -2901,8 +3368,7 @@ static void IndexedPropertyEnumeratorException(
|
| THREADED_TEST(GetOwnPropertyNamesWithIndexedInterceptorExceptions_regress4026) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope handle_scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> obj_template =
|
| - v8::ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> obj_template = v8::ObjectTemplate::New(isolate);
|
|
|
| obj_template->Set(v8_str("7"), v8::Integer::New(CcTest::isolate(), 7));
|
| obj_template->Set(v8_str("x"), v8::Integer::New(CcTest::isolate(), 42));
|
| @@ -2911,9 +3377,11 @@ THREADED_TEST(GetOwnPropertyNamesWithIndexedInterceptorExceptions_regress4026) {
|
| NULL, NULL, NULL, NULL, IndexedPropertyEnumeratorException));
|
|
|
| LocalContext context;
|
| - v8::Handle<v8::Object> global = context->Global();
|
| - global->Set(v8_str("object"), obj_template->NewInstance());
|
| - v8::Handle<v8::Value> result = CompileRun(
|
| + v8::Local<v8::Object> global = context->Global();
|
| + global->Set(context.local(), v8_str("object"),
|
| + obj_template->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + v8::Local<v8::Value> result = CompileRun(
|
| "var result = []; "
|
| "try { "
|
| " for (var k in object) result .push(k);"
|
| @@ -2922,7 +3390,7 @@ THREADED_TEST(GetOwnPropertyNamesWithIndexedInterceptorExceptions_regress4026) {
|
| "}"
|
| "result ");
|
| CHECK(!result->IsArray());
|
| - CHECK(v8_num(42)->Equals(result));
|
| + CHECK(v8_num(42)->Equals(context.local(), result).FromJust());
|
|
|
| result = CompileRun(
|
| "var result = [];"
|
| @@ -2933,7 +3401,7 @@ THREADED_TEST(GetOwnPropertyNamesWithIndexedInterceptorExceptions_regress4026) {
|
| "}"
|
| "result");
|
| CHECK(!result->IsArray());
|
| - CHECK(v8_num(42)->Equals(result));
|
| + CHECK(v8_num(42)->Equals(context.local(), result).FromJust());
|
| }
|
|
|
|
|
| @@ -2946,8 +3414,7 @@ static void NamedPropertyEnumeratorException(
|
| THREADED_TEST(GetOwnPropertyNamesWithNamedInterceptorExceptions_regress4026) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope handle_scope(isolate);
|
| - v8::Handle<v8::ObjectTemplate> obj_template =
|
| - v8::ObjectTemplate::New(isolate);
|
| + v8::Local<v8::ObjectTemplate> obj_template = v8::ObjectTemplate::New(isolate);
|
|
|
| obj_template->Set(v8_str("7"), v8::Integer::New(CcTest::isolate(), 7));
|
| obj_template->Set(v8_str("x"), v8::Integer::New(CcTest::isolate(), 42));
|
| @@ -2956,10 +3423,12 @@ THREADED_TEST(GetOwnPropertyNamesWithNamedInterceptorExceptions_regress4026) {
|
| NULL, NULL, NULL, NULL, NamedPropertyEnumeratorException));
|
|
|
| LocalContext context;
|
| - v8::Handle<v8::Object> global = context->Global();
|
| - global->Set(v8_str("object"), obj_template->NewInstance());
|
| + v8::Local<v8::Object> global = context->Global();
|
| + global->Set(context.local(), v8_str("object"),
|
| + obj_template->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| - v8::Handle<v8::Value> result = CompileRun(
|
| + v8::Local<v8::Value> result = CompileRun(
|
| "var result = []; "
|
| "try { "
|
| " for (var k in object) result.push(k);"
|
| @@ -2968,7 +3437,7 @@ THREADED_TEST(GetOwnPropertyNamesWithNamedInterceptorExceptions_regress4026) {
|
| "}"
|
| "result");
|
| CHECK(!result->IsArray());
|
| - CHECK(v8_num(43)->Equals(result));
|
| + CHECK(v8_num(43)->Equals(context.local(), result).FromJust());
|
|
|
| result = CompileRun(
|
| "var result = [];"
|
| @@ -2979,7 +3448,7 @@ THREADED_TEST(GetOwnPropertyNamesWithNamedInterceptorExceptions_regress4026) {
|
| "}"
|
| "result");
|
| CHECK(!result->IsArray());
|
| - CHECK(v8_num(43)->Equals(result));
|
| + CHECK(v8_num(43)->Equals(context.local(), result).FromJust());
|
| }
|
|
|
| namespace {
|
| @@ -2988,7 +3457,8 @@ template <typename T>
|
| Local<Object> BuildWrappedObject(v8::Isolate* isolate, T* data) {
|
| auto templ = v8::ObjectTemplate::New(isolate);
|
| templ->SetInternalFieldCount(1);
|
| - auto instance = templ->NewInstance();
|
| + auto instance =
|
| + templ->NewInstance(isolate->GetCurrentContext()).ToLocalChecked();
|
| instance->SetAlignedPointerInInternalField(0, data);
|
| return instance;
|
| }
|
| @@ -3084,11 +3554,21 @@ TEST(NamedAllCanReadInterceptor) {
|
| auto checked = v8::ObjectTemplate::New(isolate);
|
| checked->SetAccessCheckCallback(SimpleAccessChecker);
|
|
|
| - context->Global()->Set(v8_str("intercepted_0"), intercepted_0->NewInstance());
|
| - context->Global()->Set(v8_str("intercepted_1"), intercepted_1->NewInstance());
|
| - auto checked_instance = checked->NewInstance();
|
| - checked_instance->Set(v8_str("whatever"), v8_num(17));
|
| - context->Global()->Set(v8_str("checked"), checked_instance);
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("intercepted_0"),
|
| + intercepted_0->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("intercepted_1"),
|
| + intercepted_1->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + auto checked_instance =
|
| + checked->NewInstance(context.local()).ToLocalChecked();
|
| + checked_instance->Set(context.local(), v8_str("whatever"), v8_num(17))
|
| + .FromJust();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("checked"), checked_instance)
|
| + .FromJust();
|
| CompileRun(
|
| "checked.__proto__ = intercepted_1;"
|
| "intercepted_1.__proto__ = intercepted_0;");
|
| @@ -3161,11 +3641,20 @@ TEST(IndexedAllCanReadInterceptor) {
|
| auto checked = v8::ObjectTemplate::New(isolate);
|
| checked->SetAccessCheckCallback(SimpleAccessChecker);
|
|
|
| - context->Global()->Set(v8_str("intercepted_0"), intercepted_0->NewInstance());
|
| - context->Global()->Set(v8_str("intercepted_1"), intercepted_1->NewInstance());
|
| - auto checked_instance = checked->NewInstance();
|
| - context->Global()->Set(v8_str("checked"), checked_instance);
|
| - checked_instance->Set(15, v8_num(17));
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("intercepted_0"),
|
| + intercepted_0->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("intercepted_1"),
|
| + intercepted_1->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + auto checked_instance =
|
| + checked->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("checked"), checked_instance)
|
| + .FromJust();
|
| + checked_instance->Set(context.local(), 15, v8_num(17)).FromJust();
|
| CompileRun(
|
| "checked.__proto__ = intercepted_1;"
|
| "intercepted_1.__proto__ = intercepted_0;");
|
| @@ -3215,8 +3704,11 @@ THREADED_TEST(NonMaskingInterceptorOwnProperty) {
|
| conf.data = BuildWrappedObject<ShouldInterceptData>(isolate, &intercept_data);
|
| interceptor_templ->SetHandler(conf);
|
|
|
| - auto interceptor = interceptor_templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), interceptor);
|
| + auto interceptor =
|
| + interceptor_templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"), interceptor)
|
| + .FromJust();
|
|
|
| ExpectInt32("obj.whatever", 239);
|
|
|
| @@ -3243,8 +3735,11 @@ THREADED_TEST(NonMaskingInterceptorPrototypeProperty) {
|
| conf.data = BuildWrappedObject<ShouldInterceptData>(isolate, &intercept_data);
|
| interceptor_templ->SetHandler(conf);
|
|
|
| - auto interceptor = interceptor_templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), interceptor);
|
| + auto interceptor =
|
| + interceptor_templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"), interceptor)
|
| + .FromJust();
|
|
|
| ExpectInt32("obj.whatever", 239);
|
|
|
| @@ -3271,8 +3766,11 @@ THREADED_TEST(NonMaskingInterceptorPrototypePropertyIC) {
|
| conf.data = BuildWrappedObject<ShouldInterceptData>(isolate, &intercept_data);
|
| interceptor_templ->SetHandler(conf);
|
|
|
| - auto interceptor = interceptor_templ->NewInstance();
|
| - context->Global()->Set(v8_str("obj"), interceptor);
|
| + auto interceptor =
|
| + interceptor_templ->NewInstance(context.local()).ToLocalChecked();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("obj"), interceptor)
|
| + .FromJust();
|
|
|
| CompileRun(
|
| "outer = {};"
|
| @@ -3346,7 +3844,7 @@ void DatabaseSetter(Local<Name> name, Local<Value> value,
|
| const v8::PropertyCallbackInfo<Value>& info) {
|
| ApiTestFuzzer::Fuzz();
|
| auto context = info.GetIsolate()->GetCurrentContext();
|
| - if (name->Equals(v8_str("db"))) return;
|
| + if (name->Equals(context, v8_str("db")).FromJust()) return;
|
| Local<v8::Object> db = info.Holder()
|
| ->GetRealNamedProperty(context, v8_str("db"))
|
| .ToLocalChecked()
|
| @@ -3368,10 +3866,14 @@ THREADED_TEST(NonMaskingInterceptorGlobalEvalRegression) {
|
| conf.flags = v8::PropertyHandlerFlags::kNonMasking;
|
| interceptor_templ->SetHandler(conf);
|
|
|
| - context->Global()->Set(v8_str("intercepted_1"),
|
| - interceptor_templ->NewInstance());
|
| - context->Global()->Set(v8_str("intercepted_2"),
|
| - interceptor_templ->NewInstance());
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("intercepted_1"),
|
| + interceptor_templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
| + context->Global()
|
| + ->Set(context.local(), v8_str("intercepted_2"),
|
| + interceptor_templ->NewInstance(context.local()).ToLocalChecked())
|
| + .FromJust();
|
|
|
| // Init dbs.
|
| CompileRun(
|
|
|