diff options
author | Ali Ijaz Sheikh <ofrobots@google.com> | 2016-03-01 08:58:05 -0800 |
---|---|---|
committer | Ali Sheikh <ofrobots@lemonhope.roam.corp.google.com> | 2016-03-03 20:35:20 -0800 |
commit | 069e02ab47656b3efd1b6829c65856b2e1c2d1db (patch) | |
tree | eb643e0a2e88fd64bb9fc927423458d2ae96c2db /deps/v8/test/cctest/test-api-interceptors.cc | |
parent | 8938355398c79f583a468284b768652d12ba9bc9 (diff) | |
download | android-node-v8-069e02ab47656b3efd1b6829c65856b2e1c2d1db.tar.gz android-node-v8-069e02ab47656b3efd1b6829c65856b2e1c2d1db.tar.bz2 android-node-v8-069e02ab47656b3efd1b6829c65856b2e1c2d1db.zip |
deps: upgrade to V8 4.9.385.18
Pick up the current branch head for V8 4.9
https://github.com/v8/v8/commit/1ecba0f
PR-URL: https://github.com/nodejs/node/pull/4722
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Michaƫl Zasso <mic.besace@gmail.com>
Diffstat (limited to 'deps/v8/test/cctest/test-api-interceptors.cc')
-rw-r--r-- | deps/v8/test/cctest/test-api-interceptors.cc | 1444 |
1 files changed, 972 insertions, 472 deletions
diff --git a/deps/v8/test/cctest/test-api-interceptors.cc b/deps/v8/test/cctest/test-api-interceptors.cc index 3327d782f7..9f5eb21954 100644 --- a/deps/v8/test/cctest/test-api-interceptors.cc +++ b/deps/v8/test/cctest/test-api-interceptors.cc @@ -13,7 +13,7 @@ #include "src/compilation-cache.h" #include "src/execution.h" #include "src/objects.h" -#include "src/parser.h" +#include "src/parsing/parser.h" #include "src/unicode-inl.h" #include "src/utils.h" #include "src/vm-state.h" @@ -24,7 +24,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 +68,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 +110,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 +132,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 +168,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 +188,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 +220,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 +245,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 +256,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 +275,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 +285,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 +295,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 +305,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 +315,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 +327,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 +356,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 +384,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 +402,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 +415,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 +433,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 +459,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 +629,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 +665,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 +706,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 +737,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 +746,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 +773,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 +782,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 +812,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 +822,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 +851,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 +874,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 +885,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 +904,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 +947,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 +973,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 +982,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 +1008,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 +1051,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 +1062,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 +1087,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 +1098,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 +1140,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 +1151,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 +1163,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 +1204,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 +1230,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 +1260,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 +1284,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 +1305,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 +1326,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 +1350,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 +1374,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 +1403,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 +1432,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 +1454,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 +1496,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 +1524,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 +1543,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 +1566,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 +1579,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 +1594,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 +1605,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 +1619,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 +1639,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 +1677,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 +1692,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 +1729,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 +1746,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,10 +1777,12 @@ 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::JSObject> o = v8::Utils::OpenHandle<Object, i::JSObject>(result); + i::Handle<i::JSReceiver> o = + v8::Utils::OpenHandle<Object, i::JSReceiver>(result); i::Handle<i::JSArray> array(reinterpret_cast<i::JSArray*>(*o)); info.GetReturnValue().Set(v8::Utils::ToLocal(array)); } @@ -1607,12 +1807,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()); } @@ -1630,7 +1834,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 = @@ -1653,7 +1860,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 {" @@ -1686,8 +1896,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';" @@ -1713,8 +1923,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 {" @@ -1738,8 +1948,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 {" @@ -1779,8 +1989,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 {" @@ -1810,8 +2020,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;" @@ -1842,8 +2052,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;" @@ -1874,8 +2084,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};" @@ -1902,7 +2112,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 } @@ -1923,37 +2134,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(); } } @@ -1968,19 +2208,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); } @@ -1988,31 +2235,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 @@ -2021,39 +2271,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); } @@ -2062,18 +2379,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()); } @@ -2082,25 +2404,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); } @@ -2111,19 +2438,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()); } @@ -2132,11 +2464,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;" @@ -2151,7 +2486,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()); } @@ -2160,11 +2495,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;" @@ -2172,15 +2510,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); } @@ -2190,13 +2531,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;" @@ -2204,15 +2550,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); } @@ -2222,13 +2571,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;" @@ -2244,7 +2598,7 @@ THREADED_TEST(InterceptorCallICConstantFunctionNotNeededWrapped) { "test();" "%OptimizeFunctionOnNextCall(test);" "test()"); - CHECK_EQ(41, value->Int32Value()); + CHECK_EQ(41, value->Int32Value(context.local()).FromJust()); } @@ -2253,11 +2607,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();" @@ -2274,7 +2631,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()); } @@ -2284,11 +2641,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;" @@ -2302,7 +2662,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()); } @@ -2310,13 +2670,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++) {" @@ -2332,16 +2695,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); } } @@ -2352,10 +2717,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; };" @@ -2367,8 +2735,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()); } @@ -2378,13 +2749,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();" @@ -2398,8 +2773,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()); } @@ -2408,10 +2786,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);" @@ -2426,8 +2807,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()); } @@ -2435,10 +2819,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; };" @@ -2452,8 +2839,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()); } @@ -2461,10 +2856,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();" @@ -2476,8 +2874,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()); } @@ -2485,10 +2886,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();" @@ -2500,8 +2904,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()); } @@ -2510,7 +2917,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); } @@ -2523,14 +2933,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; }" @@ -2538,7 +2950,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() {" @@ -2548,7 +2960,7 @@ THREADED_TEST(InterceptorICReferenceErrors) { " return false;" "};" "g();"); - CHECK_EQ(true, value->BooleanValue()); + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust()); } @@ -2558,7 +2970,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) { @@ -2574,14 +2989,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; }" @@ -2589,7 +3006,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() {" @@ -2599,7 +3016,7 @@ THREADED_TEST(InterceptorICGetterExceptions) { " return false;" "};" "f();"); - CHECK_EQ(true, value->BooleanValue()); + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust()); } @@ -2621,11 +3038,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; }" @@ -2633,7 +3050,7 @@ THREADED_TEST(InterceptorICSetterExceptions) { " return false;" "};" "f();"); - CHECK_EQ(true, value->BooleanValue()); + CHECK_EQ(true, value->BooleanValue(context.local()).FromJust()); } @@ -2641,16 +3058,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()); } @@ -2658,27 +3076,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')"); } @@ -2688,9 +3112,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; };" @@ -2704,10 +3131,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. @@ -2731,10 +3161,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. @@ -2755,10 +3188,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;" @@ -2776,10 +3212,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;" @@ -2797,19 +3236,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();" @@ -2832,17 +3277,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); } @@ -2850,8 +3299,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)); @@ -2861,33 +3309,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()); } @@ -2900,8 +3365,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)); @@ -2910,9 +3374,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);" @@ -2921,7 +3387,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 = [];" @@ -2932,7 +3398,7 @@ THREADED_TEST(GetOwnPropertyNamesWithIndexedInterceptorExceptions_regress4026) { "}" "result"); CHECK(!result->IsArray()); - CHECK(v8_num(42)->Equals(result)); + CHECK(v8_num(42)->Equals(context.local(), result).FromJust()); } @@ -2945,8 +3411,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)); @@ -2955,10 +3420,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);" @@ -2967,7 +3434,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 = [];" @@ -2978,7 +3445,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 { @@ -2987,7 +3454,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; } @@ -3083,11 +3551,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;"); @@ -3160,11 +3638,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;"); @@ -3214,8 +3701,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); @@ -3242,8 +3732,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); @@ -3270,8 +3763,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 = {};" @@ -3345,7 +3841,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() @@ -3367,10 +3863,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( |