From: dcarney@chromium.org Date: Wed, 8 May 2013 07:45:16 +0000 (+0000) Subject: fix nosnapshot test failure in 14793004, do not deprecate function X-Git-Tag: upstream/4.7.83~14310 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d4fd9db34233e5d84ba7e640a6486d4c70e728d8;p=platform%2Fupstream%2Fv8.git fix nosnapshot test failure in 14793004, do not deprecate function BUG= TBR=svenpanne@chromium.org Review URL: https://codereview.chromium.org/14947005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14585 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/samples/process.cc b/samples/process.cc index 75d6582..fd3a821 100644 --- a/samples/process.cc +++ b/samples/process.cc @@ -168,7 +168,7 @@ bool JsHttpRequestProcessor::Initialize(map* opts, // is what we need for the reference to remain after we return from // this method. That persistent handle has to be disposed in the // destructor. - context_ = Context::New(NULL, global); + context_.Reset(GetIsolate(), Context::New(GetIsolate(), NULL, global)); // Enter the new context so all the following operations take place // within it. diff --git a/src/d8.cc b/src/d8.cc index 22f1671..f0d30a9 100644 --- a/src/d8.cc +++ b/src/d8.cc @@ -1539,7 +1539,8 @@ void Shell::InitializeDebugger(Isolate* isolate) { Locker lock(isolate); HandleScope scope(isolate); Handle global_template = CreateGlobalTemplate(isolate); - utility_context_ = Context::New(NULL, global_template); + utility_context_.Reset(isolate, + Context::New(isolate, NULL, global_template)); #ifdef ENABLE_DEBUGGER_SUPPORT // Start the debugger agent if requested. @@ -1552,17 +1553,17 @@ void Shell::InitializeDebugger(Isolate* isolate) { } -Persistent Shell::CreateEvaluationContext(Isolate* isolate) { +Local Shell::CreateEvaluationContext(Isolate* isolate) { #ifndef V8_SHARED // This needs to be a critical section since this is not thread-safe i::ScopedLock lock(context_mutex_); #endif // V8_SHARED // Initialize the global objects Handle global_template = CreateGlobalTemplate(isolate); - Persistent context = Context::New(NULL, global_template); - ASSERT(!context.IsEmpty()); HandleScope handle_scope(isolate); - Context::Scope scope(isolate, context); + Local context = Context::New(isolate, NULL, global_template); + ASSERT(!context.IsEmpty()); + Context::Scope scope(context); #ifndef V8_SHARED i::JSArguments js_args = i::FLAG_js_arguments; @@ -1578,7 +1579,7 @@ Persistent Shell::CreateEvaluationContext(Isolate* isolate) { context->Global()->Set(String::New("arguments"), Utils::ToLocal(arguments_jsarray)); #endif // V8_SHARED - return context; + return handle_scope.Close(context); } @@ -1809,9 +1810,9 @@ void ShellThread::Run() { // Prepare the context for this thread. Locker locker(isolate_); HandleScope outer_scope(isolate_); - Persistent thread_context = + Local thread_context = Shell::CreateEvaluationContext(isolate_); - Context::Scope context_scope(isolate_, thread_context); + Context::Scope context_scope(thread_context); PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate_)); while ((ptr != NULL) && (*ptr != '\0')) { @@ -1833,7 +1834,6 @@ void ShellThread::Run() { Shell::ExecuteString(isolate_, str, String::New(filename), false, false); } - thread_context.Dispose(thread_context->GetIsolate()); ptr = next_line; } } @@ -1910,15 +1910,16 @@ void SourceGroup::ExecuteInThread() { { Isolate::Scope iscope(isolate); Locker lock(isolate); - HandleScope scope(isolate); - PerIsolateData data(isolate); - Persistent context = Shell::CreateEvaluationContext(isolate); { - Context::Scope cscope(isolate, context); - PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); - Execute(isolate); + HandleScope scope(isolate); + PerIsolateData data(isolate); + Local context = Shell::CreateEvaluationContext(isolate); + { + Context::Scope cscope(context); + PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); + Execute(isolate); + } } - context.Dispose(isolate); if (Shell::options.send_idle_notification) { const int kLongIdlePauseInMs = 1000; V8::ContextDisposedNotification(); @@ -2109,26 +2110,27 @@ int Shell::RunMain(Isolate* isolate, int argc, char* argv[]) { #endif // V8_SHARED { // NOLINT Locker lock(isolate); - HandleScope scope(isolate); - Persistent context = CreateEvaluationContext(isolate); - if (options.last_run) { - // Keep using the same context in the interactive shell. - evaluation_context_ = context; + { + HandleScope scope(isolate); + Local context = CreateEvaluationContext(isolate); + if (options.last_run) { + // Keep using the same context in the interactive shell. + evaluation_context_.Reset(isolate, context); #if !defined(V8_SHARED) && defined(ENABLE_DEBUGGER_SUPPORT) - // If the interactive debugger is enabled make sure to activate - // it before running the files passed on the command line. - if (i::FLAG_debugger) { - InstallUtilityScript(isolate); - } + // If the interactive debugger is enabled make sure to activate + // it before running the files passed on the command line. + if (i::FLAG_debugger) { + InstallUtilityScript(isolate); + } #endif // !V8_SHARED && ENABLE_DEBUGGER_SUPPORT - } - { - Context::Scope cscope(isolate, context); - PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); - options.isolate_sources[0].Execute(isolate); + } + { + Context::Scope cscope(context); + PerIsolateData::RealmScope realm_scope(PerIsolateData::Get(isolate)); + options.isolate_sources[0].Execute(isolate); + } } if (!options.last_run) { - context.Dispose(isolate); if (options.send_idle_notification) { const int kLongIdlePauseInMs = 1000; V8::ContextDisposedNotification(); diff --git a/src/d8.h b/src/d8.h index 77646c2..c068dd9 100644 --- a/src/d8.h +++ b/src/d8.h @@ -273,7 +273,7 @@ class Shell : public i::AllStatic { static const char* ToCString(const v8::String::Utf8Value& value); static void ReportException(Isolate* isolate, TryCatch* try_catch); static Handle ReadFile(Isolate* isolate, const char* name); - static Persistent CreateEvaluationContext(Isolate* isolate); + static Local CreateEvaluationContext(Isolate* isolate); static int RunMain(Isolate* isolate, int argc, char* argv[]); static int Main(int argc, char* argv[]); static void Exit(int exit_code); diff --git a/src/mksnapshot.cc b/src/mksnapshot.cc index b3c6097..7592a89 100644 --- a/src/mksnapshot.cc +++ b/src/mksnapshot.cc @@ -328,13 +328,18 @@ int main(int argc, char** argv) { } #endif i::Serializer::Enable(); - Persistent context = v8::Context::New(); + Isolate* isolate = Isolate::GetCurrent(); + Persistent context; + { + HandleScope handle_scope(isolate); + context.Reset(isolate, Context::New(isolate)); + } + if (context.IsEmpty()) { fprintf(stderr, "\nException thrown while compiling natives - see above.\n\n"); exit(1); } - Isolate* isolate = context->GetIsolate(); if (i::FLAG_extra_code != NULL) { context->Enter(); // Capture 100 frames if anything happens. diff --git a/test/cctest/cctest.h b/test/cctest/cctest.h index 5a376c7..c249b5e 100644 --- a/test/cctest/cctest.h +++ b/test/cctest/cctest.h @@ -207,8 +207,14 @@ class LocalContext { LocalContext(v8::ExtensionConfiguration* extensions = 0, v8::Handle global_template = v8::Handle(), - v8::Handle global_object = v8::Handle()) - : context_(v8::Context::New(extensions, global_template, global_object)) { + v8::Handle global_object = v8::Handle()) { + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + HandleScope scope(isolate); + context_.Reset(isolate, + Context::New(isolate, + extensions, + global_template, + global_object)); context_->Enter(); // We can't do this later perhaps because of a fatal error. isolate_ = context_->GetIsolate(); diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc index 1c17e8c..c9685f8 100644 --- a/test/cctest/test-api.cc +++ b/test/cctest/test-api.cc @@ -4688,9 +4688,9 @@ THREADED_TEST(NamedInterceptorDictionaryIC) { THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); - - v8::Persistent context1 = Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); + v8::Local context1 = Context::New(isolate); context1->Enter(); Local templ = ObjectTemplate::New(); @@ -4725,8 +4725,6 @@ THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) { context1->Enter(); CompileRun("var obj = { x : 0 }; delete obj.x;"); context1->Exit(); - - context1.Dispose(context1->GetIsolate()); } @@ -5501,14 +5499,14 @@ static v8::Handle HandleLogDelegator(const v8::Arguments& args) { THREADED_TEST(GlobalObjectTemplate) { - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); Local global_template = ObjectTemplate::New(); global_template->Set(v8_str("JSNI_Log"), v8::FunctionTemplate::New(HandleLogDelegator)); - v8::Persistent context = Context::New(0, global_template); - Context::Scope context_scope(v8::Isolate::GetCurrent(), context); + v8::Local context = Context::New(isolate, 0, global_template); + Context::Scope context_scope(context); Script::Compile(v8_str("JSNI_Log('LOG')"))->Run(); - context.Dispose(context->GetIsolate()); } @@ -7676,7 +7674,8 @@ static void UnreachableSetter(Local, Local, TEST(AccessControl) { - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); v8::Handle global_template = v8::ObjectTemplate::New(); global_template->SetAccessCheckCallbacks(NamedAccessBlocker, @@ -7696,7 +7695,7 @@ TEST(AccessControl) { v8::DEFAULT); // Create an environment - v8::Persistent context0 = Context::New(NULL, global_template); + v8::Local context0 = Context::New(isolate, NULL, global_template); context0->Enter(); v8::Handle global0 = context0->Global(); @@ -7722,9 +7721,9 @@ TEST(AccessControl) { Local el_getter = global0->Get(v8_str("el_getter")); Local el_setter = global0->Get(v8_str("el_setter")); - v8::HandleScope scope1(v8::Isolate::GetCurrent()); + v8::HandleScope scope1(isolate); - v8::Persistent context1 = Context::New(); + v8::Local context1 = Context::New(isolate); context1->Enter(); v8::Handle global1 = context1->Global(); @@ -7914,13 +7913,12 @@ TEST(AccessControl) { context1->Exit(); context0->Exit(); - context1.Dispose(context1->GetIsolate()); - context0.Dispose(context0->GetIsolate()); } TEST(AccessControlES5) { - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); v8::Handle global_template = v8::ObjectTemplate::New(); global_template->SetAccessCheckCallbacks(NamedAccessBlocker, @@ -7941,12 +7939,12 @@ TEST(AccessControlES5) { v8::DEFAULT); // Create an environment - v8::Persistent context0 = Context::New(NULL, global_template); + v8::Local context0 = Context::New(isolate, NULL, global_template); context0->Enter(); v8::Handle global0 = context0->Global(); - v8::Persistent context1 = Context::New(); + v8::Local context1 = Context::New(isolate); context1->Enter(); v8::Handle global1 = context1->Global(); global1->Set(v8_str("other"), global0); @@ -8006,7 +8004,8 @@ static bool GetOwnPropertyNamesIndexedBlocker(Local global, THREADED_TEST(AccessControlGetOwnPropertyNames) { - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); v8::Handle obj_template = v8::ObjectTemplate::New(); obj_template->Set(v8_str("x"), v8::Integer::New(42)); @@ -8014,14 +8013,14 @@ THREADED_TEST(AccessControlGetOwnPropertyNames) { GetOwnPropertyNamesIndexedBlocker); // Create an environment - v8::Persistent context0 = Context::New(NULL, obj_template); + v8::Local context0 = Context::New(isolate, NULL, obj_template); context0->Enter(); v8::Handle global0 = context0->Global(); v8::HandleScope scope1(v8::Isolate::GetCurrent()); - v8::Persistent context1 = Context::New(); + v8::Local context1 = Context::New(isolate); context1->Enter(); v8::Handle global1 = context1->Global(); @@ -8043,8 +8042,6 @@ THREADED_TEST(AccessControlGetOwnPropertyNames) { context1->Exit(); context0->Exit(); - context1.Dispose(context1->GetIsolate()); - context0.Dispose(context0->GetIsolate()); } @@ -8100,7 +8097,8 @@ static v8::Handle ConstTenGetter(Local name, THREADED_TEST(CrossDomainAccessors) { - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); v8::Handle func_template = v8::FunctionTemplate::New(); @@ -8122,7 +8120,7 @@ THREADED_TEST(CrossDomainAccessors) { v8::Handle(), v8::DEFAULT); - v8::Persistent context0 = Context::New(NULL, global_template); + v8::Local context0 = Context::New(isolate, NULL, global_template); context0->Enter(); Local global = context0->Global(); @@ -8131,7 +8129,7 @@ THREADED_TEST(CrossDomainAccessors) { // Enter a new context. v8::HandleScope scope1(v8::Isolate::GetCurrent()); - v8::Persistent context1 = Context::New(); + v8::Local context1 = Context::New(isolate); context1->Enter(); v8::Handle global1 = context1->Global(); @@ -8147,8 +8145,6 @@ THREADED_TEST(CrossDomainAccessors) { context1->Exit(); context0->Exit(); - context1.Dispose(context1->GetIsolate()); - context0.Dispose(context0->GetIsolate()); } @@ -8178,10 +8174,11 @@ TEST(AccessControlIC) { named_access_count = 0; indexed_access_count = 0; - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); // Create an environment. - v8::Persistent context0 = Context::New(); + v8::Local context0 = Context::New(isolate); context0->Enter(); // Create an object that requires access-check functions to be @@ -8191,10 +8188,10 @@ TEST(AccessControlIC) { IndexedAccessCounter); Local object = object_template->NewInstance(); - v8::HandleScope scope1(v8::Isolate::GetCurrent()); + v8::HandleScope scope1(isolate); // Create another environment. - v8::Persistent context1 = Context::New(); + v8::Local context1 = Context::New(isolate); context1->Enter(); // Make easy access to the object from the other environment. @@ -8282,8 +8279,6 @@ TEST(AccessControlIC) { context1->Exit(); context0->Exit(); - context1.Dispose(context1->GetIsolate()); - context0.Dispose(context0->GetIsolate()); } @@ -8327,10 +8322,11 @@ THREADED_TEST(AccessControlFlatten) { named_access_count = 0; indexed_access_count = 0; - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); // Create an environment. - v8::Persistent context0 = Context::New(); + v8::Local context0 = Context::New(isolate); context0->Enter(); // Create an object that requires access-check functions to be @@ -8340,10 +8336,10 @@ THREADED_TEST(AccessControlFlatten) { IndexedAccessFlatten); Local object = object_template->NewInstance(); - v8::HandleScope scope1(v8::Isolate::GetCurrent()); + v8::HandleScope scope1(isolate); // Create another environment. - v8::Persistent context1 = Context::New(); + v8::Local context1 = Context::New(isolate); context1->Enter(); // Make easy access to the object from the other environment. @@ -8357,8 +8353,6 @@ THREADED_TEST(AccessControlFlatten) { context1->Exit(); context0->Exit(); - context1.Dispose(context1->GetIsolate()); - context0.Dispose(context0->GetIsolate()); } @@ -8391,10 +8385,11 @@ THREADED_TEST(AccessControlInterceptorIC) { named_access_count = 0; indexed_access_count = 0; - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); // Create an environment. - v8::Persistent context0 = Context::New(); + v8::Local context0 = Context::New(isolate); context0->Enter(); // Create an object that requires access-check functions to be @@ -8409,10 +8404,10 @@ THREADED_TEST(AccessControlInterceptorIC) { AccessControlIndexedSetter); Local object = object_template->NewInstance(); - v8::HandleScope scope1(v8::Isolate::GetCurrent()); + v8::HandleScope scope1(isolate); // Create another environment. - v8::Persistent context1 = Context::New(); + v8::Local context1 = Context::New(isolate); context1->Enter(); // Make easy access to the object from the other environment. @@ -8449,8 +8444,6 @@ THREADED_TEST(AccessControlInterceptorIC) { context1->Exit(); context0->Exit(); - context1.Dispose(context1->GetIsolate()); - context0.Dispose(context0->GetIsolate()); } @@ -9311,10 +9304,11 @@ THREADED_TEST(CrossEval) { // its global throws an exception. This behavior is consistent with // other JavaScript implementations. THREADED_TEST(EvalInDetachedGlobal) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); - v8::Persistent context0 = Context::New(); - v8::Persistent context1 = Context::New(); + v8::Local context0 = Context::New(isolate); + v8::Local context1 = Context::New(isolate); // Set up function in context0 that uses eval from context0. context0->Enter(); @@ -9339,9 +9333,6 @@ THREADED_TEST(EvalInDetachedGlobal) { CHECK(x_value.IsEmpty()); CHECK(catcher.HasCaught()); context1->Exit(); - - context1.Dispose(context1->GetIsolate()); - context0.Dispose(context0->GetIsolate()); } @@ -11974,7 +11965,7 @@ THREADED_TEST(CheckForCrossContextObjectLiterals) { } -static v8::Handle NestedScope(v8::Persistent env) { +static v8::Handle NestedScope(v8::Local env) { v8::HandleScope inner(env->GetIsolate()); env->Enter(); v8::Handle three = v8_num(3); @@ -11985,14 +11976,14 @@ static v8::Handle NestedScope(v8::Persistent env) { THREADED_TEST(NestedHandleScopeAndContexts) { - v8::HandleScope outer(v8::Isolate::GetCurrent()); - v8::Persistent env = Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope outer(isolate); + v8::Local env = Context::New(isolate); env->Enter(); v8::Handle value = NestedScope(env); v8::Handle str(value->ToString()); CHECK(!str.IsEmpty()); env->Exit(); - env.Dispose(env->GetIsolate()); } @@ -12024,8 +12015,9 @@ static void RunLoopInNewEnv() { bar_ptr = NULL; foo_ptr = NULL; - v8::HandleScope outer(v8::Isolate::GetCurrent()); - v8::Persistent env = Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope outer(isolate); + v8::Local env = Context::New(isolate); env->Enter(); const char* script = @@ -12351,11 +12343,11 @@ static int64_t cast(intptr_t x) { return static_cast(x); } THREADED_TEST(ExternalAllocatedMemory) { - v8::HandleScope outer(v8::Isolate::GetCurrent()); - v8::Persistent env(Context::New()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope outer(isolate); + v8::Local env(Context::New(isolate)); CHECK(!env.IsEmpty()); const intptr_t kSize = 1024*1024; - v8::Isolate* isolate = env->GetIsolate(); int64_t baseline = cast(isolate->AdjustAmountOfExternalAllocatedMemory(0)); CHECK_EQ(baseline + cast(kSize), cast(isolate->AdjustAmountOfExternalAllocatedMemory(kSize))); @@ -12366,8 +12358,14 @@ THREADED_TEST(ExternalAllocatedMemory) { THREADED_TEST(DisposeEnteredContext) { LocalContext outer; - v8::HandleScope scope(outer->GetIsolate()); - { v8::Persistent inner = v8::Context::New(); + v8::Isolate* isolate = outer->GetIsolate(); + v8::Persistent inner; + { + v8::HandleScope scope(isolate); + inner.Reset(isolate, v8::Context::New(isolate)); + } + v8::HandleScope scope(isolate); + { inner->Enter(); inner.Dispose(inner->GetIsolate()); inner.Clear(); @@ -12687,7 +12685,8 @@ THREADED_TEST(AccessChecksReenabledCorrectly) { // This tests that access check information remains on the global // object template when creating contexts. THREADED_TEST(AccessControlRepeatedContextCreation) { - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); v8::Handle global_template = v8::ObjectTemplate::New(); global_template->SetAccessCheckCallbacks(NamedSetAccessBlocker, IndexedSetAccessBlocker); @@ -12697,14 +12696,15 @@ THREADED_TEST(AccessControlRepeatedContextCreation) { i::Handle constructor( i::FunctionTemplateInfo::cast(internal_template->constructor())); CHECK(!constructor->access_check_info()->IsUndefined()); - v8::Persistent context0(Context::New(NULL, global_template)); + v8::Local context0(Context::New(isolate, NULL, global_template)); CHECK(!context0.IsEmpty()); CHECK(!constructor->access_check_info()->IsUndefined()); } THREADED_TEST(TurnOnAccessCheck) { - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); // Create an environment with access check to the global object disabled by // default. @@ -12713,8 +12713,8 @@ THREADED_TEST(TurnOnAccessCheck) { IndexedGetAccessBlocker, v8::Handle(), false); - v8::Persistent context = Context::New(NULL, global_template); - Context::Scope context_scope(v8::Isolate::GetCurrent(), context); + v8::Local context = Context::New(isolate, NULL, global_template); + Context::Scope context_scope(context); // Set up a property and a number of functions. context->Global()->Set(v8_str("a"), v8_num(1)); @@ -12784,7 +12784,8 @@ static bool NamedGetAccessBlockAandH(Local obj, THREADED_TEST(TurnOnAccessCheckAndRecompile) { - v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); // Create an environment with access check to the global object disabled by // default. When the registered access checker will block access to properties @@ -12794,8 +12795,8 @@ THREADED_TEST(TurnOnAccessCheckAndRecompile) { IndexedGetAccessBlocker, v8::Handle(), false); - v8::Persistent context = Context::New(NULL, global_template); - Context::Scope context_scope(v8::Isolate::GetCurrent(), context); + v8::Local context = Context::New(isolate, NULL, global_template); + Context::Scope context_scope(context); // Set up a property and a number of functions. context->Global()->Set(v8_str("a"), v8_num(1)); @@ -13053,9 +13054,10 @@ THREADED_TEST(DictionaryICLoadedFunction) { // Test that cross-context new calls use the context of the callee to // create the new JavaScript object. THREADED_TEST(CrossContextNew) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); - v8::Persistent context0 = Context::New(); - v8::Persistent context1 = Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); + v8::Local context0 = Context::New(isolate); + v8::Local context1 = Context::New(isolate); // Allow cross-domain access. Local token = v8_str(""); @@ -13076,10 +13078,6 @@ THREADED_TEST(CrossContextNew) { CHECK(value->IsInt32()); CHECK_EQ(42, value->Int32Value()); context1->Exit(); - - // Dispose the contexts to allow them to be garbage collected. - context0.Dispose(context0->GetIsolate()); - context1.Dispose(context1->GetIsolate()); } @@ -13860,9 +13858,10 @@ THREADED_TEST(ForceDeleteIC) { TEST(InlinedFunctionAcrossContexts) { i::FLAG_allow_natives_syntax = true; - v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); - v8::Persistent ctx1 = v8::Context::New(); - v8::Persistent ctx2 = v8::Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope outer_scope(isolate); + v8::Local ctx1 = v8::Context::New(isolate); + v8::Local ctx2 = v8::Context::New(isolate); ctx1->Enter(); { @@ -13892,15 +13891,13 @@ TEST(InlinedFunctionAcrossContexts) { "ReferenceError: G is not defined"); ctx2->Exit(); ctx1->Exit(); - ctx1.Dispose(ctx1->GetIsolate()); } - ctx2.Dispose(ctx2->GetIsolate()); } -v8::Persistent calling_context0; -v8::Persistent calling_context1; -v8::Persistent calling_context2; +static v8::Local calling_context0; +static v8::Local calling_context1; +static v8::Local calling_context2; // Check that the call to the callback is initiated in @@ -13917,11 +13914,15 @@ static v8::Handle GetCallingContextCallback(const v8::Arguments& args) { THREADED_TEST(GetCallingContext) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); - calling_context0 = Context::New(); - calling_context1 = Context::New(); - calling_context2 = Context::New(); + Local calling_context0(Context::New(isolate)); + Local calling_context1(Context::New(isolate)); + Local calling_context2(Context::New(isolate)); + ::calling_context0 = calling_context0; + ::calling_context1 = calling_context1; + ::calling_context2 = calling_context2; // Allow cross-domain access. Local token = v8_str(""); @@ -13952,14 +13953,9 @@ THREADED_TEST(GetCallingContext) { calling_context1->Global()); CompileRun("context1.f()"); calling_context2->Exit(); - - // Dispose the contexts to allow them to be garbage collected. - calling_context0.Dispose(calling_context0->GetIsolate()); - calling_context1.Dispose(calling_context1->GetIsolate()); - calling_context2.Dispose(calling_context2->GetIsolate()); - calling_context0.Clear(); - calling_context1.Clear(); - calling_context2.Clear(); + ::calling_context0.Clear(); + ::calling_context1.Clear(); + ::calling_context2.Clear(); } @@ -15804,17 +15800,20 @@ TEST(Regress2107) { const int kShortIdlePauseInMs = 100; const int kLongIdlePauseInMs = 1000; LocalContext env; + v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope scope(env->GetIsolate()); intptr_t initial_size = HEAP->SizeOfObjects(); // Send idle notification to start a round of incremental GCs. v8::V8::IdleNotification(kShortIdlePauseInMs); // Emulate 7 page reloads. for (int i = 0; i < 7; i++) { - v8::Persistent ctx = v8::Context::New(); - ctx->Enter(); - CreateGarbageInOldSpace(); - ctx->Exit(); - ctx.Dispose(ctx->GetIsolate()); + { + v8::HandleScope inner_scope(env->GetIsolate()); + v8::Local ctx = v8::Context::New(isolate); + ctx->Enter(); + CreateGarbageInOldSpace(); + ctx->Exit(); + } v8::V8::ContextDisposedNotification(); v8::V8::IdleNotification(kLongIdlePauseInMs); } @@ -16143,22 +16142,21 @@ THREADED_TEST(SpaghettiStackReThrow) { TEST(Regress528) { v8::V8::Initialize(); - - v8::HandleScope scope(v8::Isolate::GetCurrent()); - v8::Persistent context; - v8::Persistent other_context; + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); + v8::Local other_context; int gc_count; // Create a context used to keep the code from aging in the compilation // cache. - other_context = Context::New(); + other_context = Context::New(isolate); // Context-dependent context data creates reference from the compilation // cache to the global object. const char* source_simple = "1"; - context = Context::New(); { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::HandleScope scope(isolate); + v8::Local context = Context::New(isolate); context->Enter(); Local obj = v8::String::New(""); @@ -16166,7 +16164,6 @@ TEST(Regress528) { CompileRun(source_simple); context->Exit(); } - context.Dispose(context->GetIsolate()); v8::V8::ContextDisposedNotification(); for (gc_count = 1; gc_count < 10; gc_count++) { other_context->Enter(); @@ -16181,15 +16178,14 @@ TEST(Regress528) { // Eval in a function creates reference from the compilation cache to the // global object. const char* source_eval = "function f(){eval('1')}; f()"; - context = Context::New(); { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::HandleScope scope(isolate); + v8::Local context = Context::New(isolate); context->Enter(); CompileRun(source_eval); context->Exit(); } - context.Dispose(context->GetIsolate()); v8::V8::ContextDisposedNotification(); for (gc_count = 1; gc_count < 10; gc_count++) { other_context->Enter(); @@ -16204,9 +16200,9 @@ TEST(Regress528) { // Looking up the line number for an exception creates reference from the // compilation cache to the global object. const char* source_exception = "function f(){throw 1;} f()"; - context = Context::New(); { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::HandleScope scope(isolate); + v8::Local context = Context::New(isolate); context->Enter(); v8::TryCatch try_catch; @@ -16217,7 +16213,6 @@ TEST(Regress528) { CHECK_EQ(1, message->GetLineNumber()); context->Exit(); } - context.Dispose(context->GetIsolate()); v8::V8::ContextDisposedNotification(); for (gc_count = 1; gc_count < 10; gc_count++) { other_context->Enter(); @@ -16229,7 +16224,6 @@ TEST(Regress528) { CHECK_GE(2, gc_count); CHECK_EQ(1, GetGlobalObjectsCount()); - other_context.Dispose(other_context->GetIsolate()); v8::V8::ContextDisposedNotification(); } @@ -16946,7 +16940,11 @@ TEST(RunTwoIsolatesOnSingleThread) { // Run isolate 1. v8::Isolate* isolate1 = v8::Isolate::New(); isolate1->Enter(); - v8::Persistent context1 = v8::Context::New(); + v8::Persistent context1; + { + v8::HandleScope scope(isolate1); + context1.Reset(isolate1, Context::New(isolate1)); + } { v8::HandleScope scope(isolate1); @@ -16962,8 +16960,8 @@ TEST(RunTwoIsolatesOnSingleThread) { { v8::Isolate::Scope iscope(isolate2); - context2 = v8::Context::New(); v8::HandleScope scope(isolate2); + context2.Reset(isolate2, Context::New(isolate2)); v8::Context::Scope cscope(isolate2, context2); // Run something in new isolate. @@ -16981,7 +16979,13 @@ TEST(RunTwoIsolatesOnSingleThread) { isolate1->Exit(); // Run some stuff in default isolate. - v8::Persistent context_default = v8::Context::New(); + v8::Persistent context_default; + { + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::Isolate::Scope iscope(isolate); + v8::HandleScope scope(isolate); + context_default.Reset(isolate, Context::New(isolate)); + } { v8::HandleScope scope(v8::Isolate::GetCurrent()); @@ -17107,12 +17111,12 @@ TEST(MultipleIsolatesOnIndividualThreads) { TEST(IsolateDifferentContexts) { v8::Isolate* isolate = v8::Isolate::New(); - Persistent context; + Local context; { v8::Isolate::Scope isolate_scope(isolate); v8::HandleScope handle_scope(isolate); - context = v8::Context::New(); - v8::Context::Scope context_scope(isolate, context); + context = v8::Context::New(isolate); + v8::Context::Scope context_scope(context); Local v = CompileRun("2"); CHECK(v->IsNumber()); CHECK_EQ(2, static_cast(v->NumberValue())); @@ -17120,13 +17124,12 @@ TEST(IsolateDifferentContexts) { { v8::Isolate::Scope isolate_scope(isolate); v8::HandleScope handle_scope(isolate); - context = v8::Context::New(); - v8::Context::Scope context_scope(isolate, context); + context = v8::Context::New(isolate); + v8::Context::Scope context_scope(context); Local v = CompileRun("22"); CHECK(v->IsNumber()); CHECK_EQ(22, static_cast(v->NumberValue())); } - isolate->Dispose(); } class InitDefaultIsolateThread : public v8::internal::Thread { @@ -18015,7 +18018,8 @@ static bool BlockProtoNamedSecurityTestCallback(Local global, THREADED_TEST(Regress93759) { - HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + HandleScope scope(isolate); // Template for object with security check. Local no_proto_template = v8::ObjectTemplate::New(); @@ -18036,7 +18040,7 @@ THREADED_TEST(Regress93759) { protected_hidden_proto_template->SetHiddenPrototype(true); // Context for "foreign" objects used in test. - Persistent context = v8::Context::New(); + Local context = v8::Context::New(isolate); context->Enter(); // Plain object, no security check. @@ -18100,8 +18104,6 @@ THREADED_TEST(Regress93759) { Local result6 = CompileRun("Object.getPrototypeOf(phidden)"); CHECK(result6->Equals(Undefined())); - - context.Dispose(context->GetIsolate()); } @@ -18140,14 +18142,15 @@ static void TestReceiver(Local expected_result, THREADED_TEST(ForeignFunctionReceiver) { - HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + HandleScope scope(isolate); // Create two contexts with different "id" properties ('i' and 'o'). // Call a function both from its own context and from a the foreign // context, and see what "this" is bound to (returning both "this" // and "this.id" for comparison). - Persistent foreign_context = v8::Context::New(); + Local foreign_context = v8::Context::New(isolate); foreign_context->Enter(); Local foreign_function = CompileRun("function func() { return { 0: this.id, " @@ -18228,8 +18231,6 @@ THREADED_TEST(ForeignFunctionReceiver) { TestReceiver(o, context->Global(), "func()"); // Calling with no base. TestReceiver(o, context->Global(), "(1,func)()"); - - foreign_context.Dispose(foreign_context->GetIsolate()); } diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc index 4d2cb04..1afe890 100644 --- a/test/cctest/test-debug.cc +++ b/test/cctest/test-debug.cc @@ -136,12 +136,16 @@ class DebugLocalContext { v8::Handle global_template = v8::Handle(), v8::Handle global_object = v8::Handle()) - : context_(v8::Context::New(extensions, global_template, global_object)) { + : scope_(v8::Isolate::GetCurrent()), + context_( + v8::Context::New(v8::Isolate::GetCurrent(), + extensions, + global_template, + global_object)) { context_->Enter(); } inline ~DebugLocalContext() { context_->Exit(); - context_.Dispose(context_->GetIsolate()); } inline v8::Context* operator->() { return *context_; } inline v8::Context* operator*() { return *context_; } @@ -166,7 +170,8 @@ class DebugLocalContext { } private: - v8::Persistent context_; + v8::HandleScope scope_; + v8::Local context_; }; @@ -4234,7 +4239,8 @@ static const char* kSimpleExtensionSource = // http://crbug.com/28933 // Test that debug break is disabled when bootstrapper is active. TEST(NoBreakWhenBootstrapping) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); // Register a debug event listener which sets the break flag and counts. v8::Debug::SetDebugEventListener(DebugEventCounter); @@ -4249,8 +4255,8 @@ TEST(NoBreakWhenBootstrapping) { kSimpleExtensionSource)); const char* extension_names[] = { "simpletest" }; v8::ExtensionConfiguration extensions(1, extension_names); - v8::Persistent context = v8::Context::New(&extensions); - context.Dispose(context->GetIsolate()); + v8::HandleScope handle_scope(isolate); + v8::Context::New(isolate, &extensions); } // Check that no DebugBreak events occured during the context creation. CHECK_EQ(0, break_point_hit_count); @@ -6235,7 +6241,7 @@ TEST(ScriptNameAndData) { } -static v8::Persistent expected_context; +static v8::Handle expected_context; static v8::Handle expected_context_data; @@ -6293,7 +6299,7 @@ TEST(ContextData) { // Enter and run function in the first context. { v8::Context::Scope context_scope(context_1); - expected_context = v8::Persistent(*context_1); + expected_context = context_1; expected_context_data = data_1; v8::Local f = CompileFunction(source, "f"); f->Call(context_1->Global(), 0, NULL); @@ -6303,7 +6309,7 @@ TEST(ContextData) { // Enter and run function in the second context. { v8::Context::Scope context_scope(context_2); - expected_context = v8::Persistent(*context_2); + expected_context = context_2; expected_context_data = data_2; v8::Local f = CompileFunction(source, "f"); f->Call(context_2->Global(), 0, NULL); @@ -6454,7 +6460,7 @@ static void ExecuteScriptForContextCheck() { // Enter and run function in the context. { v8::Context::Scope context_scope(context_1); - expected_context = v8::Persistent(*context_1); + expected_context = v8::Local(*context_1); expected_context_data = data_1; v8::Local f = CompileFunction(source, "f"); f->Call(context_1->Global(), 0, NULL); @@ -6615,22 +6621,26 @@ TEST(ScriptCollectedEventContext) { script_collected_message_count = 0; v8::HandleScope scope(isolate); - { // Scope for the DebugLocalContext. - DebugLocalContext env; + v8::Persistent context; + { + v8::HandleScope scope(isolate); + context.Reset(isolate, v8::Context::New(isolate)); + } + context->Enter(); - // Request the loaded scripts to initialize the debugger script cache. - debug->GetLoadedScripts(); + // Request the loaded scripts to initialize the debugger script cache. + debug->GetLoadedScripts(); - // Do garbage collection to ensure that only the script in this test will be - // collected afterwards. - HEAP->CollectAllGarbage(Heap::kNoGCFlags); + // Do garbage collection to ensure that only the script in this test will be + // collected afterwards. + HEAP->CollectAllGarbage(Heap::kNoGCFlags); - v8::Debug::SetMessageHandler2(ScriptCollectedMessageHandler); - { - v8::Script::Compile(v8::String::New("eval('a=1')"))->Run(); - v8::Script::Compile(v8::String::New("eval('a=2')"))->Run(); - } - } + v8::Debug::SetMessageHandler2(ScriptCollectedMessageHandler); + v8::Script::Compile(v8::String::New("eval('a=1')"))->Run(); + v8::Script::Compile(v8::String::New("eval('a=2')"))->Run(); + + context->Exit(); + context.Dispose(isolate); // Do garbage collection to collect the script above which is no longer // referenced. @@ -7089,15 +7099,14 @@ static void DebugEventContextChecker(const v8::Debug::EventDetails& details) { // Check that event details contain context where debug event occured. TEST(DebugEventContext) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); expected_callback_data = v8::Int32::New(2010); v8::Debug::SetDebugEventListener2(DebugEventContextChecker, expected_callback_data); - expected_context = v8::Context::New(); - v8::Context::Scope context_scope( - v8::Isolate::GetCurrent(), expected_context); + expected_context = v8::Context::New(isolate); + v8::Context::Scope context_scope(expected_context); v8::Script::Compile(v8::String::New("(function(){debugger;})();"))->Run(); - expected_context.Dispose(expected_context->GetIsolate()); expected_context.Clear(); v8::Debug::SetDebugEventListener(NULL); expected_context_data = v8::Handle(); diff --git a/test/cctest/test-decls.cc b/test/cctest/test-decls.cc index 6216d67..6be5303 100644 --- a/test/cctest/test-decls.cc +++ b/test/cctest/test-decls.cc @@ -118,7 +118,8 @@ DeclarationContext::DeclarationContext() void DeclarationContext::InitializeIfNeeded() { if (is_initialized_) return; - HandleScope scope(Isolate::GetCurrent()); + Isolate* isolate = Isolate::GetCurrent(); + HandleScope scope(isolate); Local function = FunctionTemplate::New(); Local data = External::New(this); GetHolder(function)->SetNamedPropertyHandler(&HandleGet, @@ -126,10 +127,14 @@ void DeclarationContext::InitializeIfNeeded() { &HandleQuery, 0, 0, data); - context_ = Context::New(0, function->InstanceTemplate(), Local()); + context_.Reset(isolate, + Context::New(isolate, + 0, + function->InstanceTemplate(), + Local())); context_->Enter(); is_initialized_ = true; - PostInitializeContext(Local::New(Isolate::GetCurrent(), context_)); + PostInitializeContext(Local::New(isolate, context_)); } @@ -699,14 +704,14 @@ TEST(ExistsInHiddenPrototype) { class SimpleContext { public: - SimpleContext() { - context_ = Context::New(); + SimpleContext() + : handle_scope_(Isolate::GetCurrent()), + context_(Context::New(Isolate::GetCurrent())) { context_->Enter(); } - virtual ~SimpleContext() { + ~SimpleContext() { context_->Exit(); - context_.Dispose(context_->GetIsolate()); } void Check(const char* source, @@ -737,7 +742,8 @@ class SimpleContext { } private: - Persistent context_; + HandleScope handle_scope_; + Local context_; }; diff --git a/test/cctest/test-hashing.cc b/test/cctest/test-hashing.cc index 6cf63d9..1547613 100644 --- a/test/cctest/test-hashing.cc +++ b/test/cctest/test-hashing.cc @@ -47,8 +47,6 @@ using namespace v8::internal; typedef uint32_t (*HASH_FUNCTION)(); -static v8::Persistent env; - #define __ masm-> @@ -235,7 +233,10 @@ static uint32_t PseudoRandom(uint32_t i, uint32_t j) { TEST(StringHash) { - if (env.IsEmpty()) env = v8::Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); + v8::Context::Scope context_scope(v8::Context::New(isolate)); + for (uint8_t a = 0; a < String::kMaxOneByteCharCode; a++) { // Numbers are hashed differently. if (a >= '0' && a <= '9') continue; @@ -253,7 +254,9 @@ TEST(StringHash) { TEST(NumberHash) { - if (env.IsEmpty()) env = v8::Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); + v8::Context::Scope context_scope(v8::Context::New(isolate)); // Some specific numbers for (uint32_t key = 0; key < 42; key += 7) { diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc index 1de24ce..069ba2d 100644 --- a/test/cctest/test-heap.cc +++ b/test/cctest/test-heap.cc @@ -1661,9 +1661,15 @@ static int NumberOfGlobalObjects() { // optimized code. TEST(LeakNativeContextViaMap) { i::FLAG_allow_natives_syntax = true; - v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); - v8::Persistent ctx1 = v8::Context::New(); - v8::Persistent ctx2 = v8::Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope outer_scope(isolate); + v8::Persistent ctx1; + v8::Persistent ctx2; + { + v8::HandleScope scope(isolate); + ctx1.Reset(isolate, v8::Context::New(isolate)); + ctx2.Reset(isolate, v8::Context::New(isolate)); + } ctx1->Enter(); HEAP->CollectAllAvailableGarbage(); @@ -1699,9 +1705,15 @@ TEST(LeakNativeContextViaMap) { // optimized code. TEST(LeakNativeContextViaFunction) { i::FLAG_allow_natives_syntax = true; - v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); - v8::Persistent ctx1 = v8::Context::New(); - v8::Persistent ctx2 = v8::Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope outer_scope(isolate); + v8::Persistent ctx1; + v8::Persistent ctx2; + { + v8::HandleScope scope(isolate); + ctx1.Reset(isolate, v8::Context::New(isolate)); + ctx2.Reset(isolate, v8::Context::New(isolate)); + } ctx1->Enter(); HEAP->CollectAllAvailableGarbage(); @@ -1735,9 +1747,15 @@ TEST(LeakNativeContextViaFunction) { TEST(LeakNativeContextViaMapKeyed) { i::FLAG_allow_natives_syntax = true; - v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); - v8::Persistent ctx1 = v8::Context::New(); - v8::Persistent ctx2 = v8::Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope outer_scope(isolate); + v8::Persistent ctx1; + v8::Persistent ctx2; + { + v8::HandleScope scope(isolate); + ctx1.Reset(isolate, v8::Context::New(isolate)); + ctx2.Reset(isolate, v8::Context::New(isolate)); + } ctx1->Enter(); HEAP->CollectAllAvailableGarbage(); @@ -1771,9 +1789,15 @@ TEST(LeakNativeContextViaMapKeyed) { TEST(LeakNativeContextViaMapProto) { i::FLAG_allow_natives_syntax = true; - v8::HandleScope outer_scope(v8::Isolate::GetCurrent()); - v8::Persistent ctx1 = v8::Context::New(); - v8::Persistent ctx2 = v8::Context::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope outer_scope(isolate); + v8::Persistent ctx1; + v8::Persistent ctx2; + { + v8::HandleScope scope(isolate); + ctx1.Reset(isolate, v8::Context::New(isolate)); + ctx2.Reset(isolate, v8::Context::New(isolate)); + } ctx1->Enter(); HEAP->CollectAllAvailableGarbage(); diff --git a/test/cctest/test-lockers.cc b/test/cctest/test-lockers.cc index 8486e21..ca0f073 100644 --- a/test/cctest/test-lockers.cc +++ b/test/cctest/test-lockers.cc @@ -622,15 +622,14 @@ TEST(LockUnlockLockDefaultIsolateMultithreaded) { #else const int kNThreads = 100; #endif - Persistent context; + Local context; i::List threads(kNThreads); { v8::Locker locker_(CcTest::default_isolate()); v8::HandleScope handle_scope(CcTest::default_isolate()); - context = v8::Context::New(); + context = v8::Context::New(CcTest::default_isolate()); for (int i = 0; i < kNThreads; i++) { - threads.Add(new LockUnlockLockDefaultIsolateThread( - v8::Local::New(CcTest::default_isolate(), context))); + threads.Add(new LockUnlockLockDefaultIsolateThread(context)); } } StartJoinAndDeleteThreads(threads); @@ -675,9 +674,9 @@ class IsolateGenesisThread : public JoinableThread { v8::Isolate::Scope isolate_scope(isolate); CHECK(!i::Isolate::Current()->has_installed_extensions()); v8::ExtensionConfiguration extensions(count_, extension_names_); - v8::Persistent context = v8::Context::New(&extensions); + v8::HandleScope handle_scope(isolate); + v8::Context::New(isolate, &extensions); CHECK(i::Isolate::Current()->has_installed_extensions()); - context.Dispose(isolate); } isolate->Dispose(); } diff --git a/test/cctest/test-log.cc b/test/cctest/test-log.cc index b49bb82..3288fc8 100644 --- a/test/cctest/test-log.cc +++ b/test/cctest/test-log.cc @@ -67,7 +67,7 @@ class ScopedLoggerInitializer { // Need to run this prior to creating the scope. trick_to_run_init_flags_(init_flags_(prof_lazy)), scope_(v8::Isolate::GetCurrent()), - env_(*v8::Context::New()), + env_(v8::Context::New(v8::Isolate::GetCurrent())), logger_(i::Isolate::Current()->logger()) { env_->Enter(); } diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc index f74c079..05fea0b 100644 --- a/test/cctest/test-parsing.cc +++ b/test/cctest/test-parsing.cc @@ -176,9 +176,10 @@ class ScriptResource : public v8::String::ExternalAsciiStringResource { TEST(Preparsing) { - v8::HandleScope handles(v8::Isolate::GetCurrent()); - v8::Persistent context = v8::Context::New(); - v8::Context::Scope context_scope(v8::Isolate::GetCurrent(), context); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handles(isolate); + v8::Local context = v8::Context::New(isolate); + v8::Context::Scope context_scope(context); int marker; i::Isolate::Current()->stack_guard()->SetStackLimit( reinterpret_cast(&marker) - 128 * 1024); @@ -542,9 +543,10 @@ void TestCharacterStream(const char* ascii_source, TEST(CharacterStreams) { - v8::HandleScope handles(v8::Isolate::GetCurrent()); - v8::Persistent context = v8::Context::New(); - v8::Context::Scope context_scope(v8::Isolate::GetCurrent(), context); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handles(isolate); + v8::Local context = v8::Context::New(isolate); + v8::Context::Scope context_scope(context); TestCharacterStream("abc\0\n\r\x7f", 7); static const unsigned kBigStringSize = 4096; diff --git a/test/cctest/test-profile-generator.cc b/test/cctest/test-profile-generator.cc index a18422a..70b34e3 100644 --- a/test/cctest/test-profile-generator.cc +++ b/test/cctest/test-profile-generator.cc @@ -855,7 +855,6 @@ v8::Handle ProfilerExtension::StopProfiling( static ProfilerExtension kProfilerExtension; v8::DeclareExtension kProfilerExtensionDeclaration(&kProfilerExtension); -static v8::Persistent env; static const ProfileNode* PickChild(const ProfileNode* parent, const char* name) { @@ -872,14 +871,12 @@ TEST(RecordStackTraceAtStartProfiling) { // don't appear in the stack trace. i::FLAG_use_inlining = false; - if (env.IsEmpty()) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); - const char* extensions[] = { "v8/profiler" }; - v8::ExtensionConfiguration config(1, extensions); - env = v8::Context::New(&config); - } - v8::HandleScope scope(v8::Isolate::GetCurrent()); - (*env)->Enter(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); + const char* extensions[] = { "v8/profiler" }; + v8::ExtensionConfiguration config(1, extensions); + v8::Local context = v8::Context::New(isolate); + context->Enter(); CpuProfiler* profiler = i::Isolate::Current()->cpu_profiler(); CHECK_EQ(0, profiler->GetProfilesCount()); diff --git a/test/cctest/test-random.cc b/test/cctest/test-random.cc index 6b6e0e0..0837ab3 100644 --- a/test/cctest/test-random.cc +++ b/test/cctest/test-random.cc @@ -39,8 +39,6 @@ using namespace v8::internal; -static v8::Persistent env; - void SetSeeds(Handle seeds, uint32_t state0, uint32_t state1) { for (int i = 0; i < 4; i++) { @@ -73,11 +71,12 @@ void TestSeeds(Handle fun, TEST(CrankshaftRandom) { - if (env.IsEmpty()) env = v8::Context::New(); + v8::V8::Initialize(); // Skip test if crankshaft is disabled. if (!V8::UseCrankshaft()) return; - v8::HandleScope scope(env->GetIsolate()); - env->Enter(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); + v8::Context::Scope context_scope(v8::Context::New(isolate)); Handle context(Isolate::Current()->context()); Handle global(context->global_object()); diff --git a/test/cctest/test-regexp.cc b/test/cctest/test-regexp.cc index 4c05aa5..f311dcc 100644 --- a/test/cctest/test-regexp.cc +++ b/test/cctest/test-regexp.cc @@ -711,19 +711,17 @@ typedef RegExpMacroAssemblerMIPS ArchRegExpMacroAssembler; class ContextInitializer { public: ContextInitializer() - : env_(), - scope_(v8::Isolate::GetCurrent()), + : scope_(v8::Isolate::GetCurrent()), + env_(v8::Context::New(v8::Isolate::GetCurrent())), zone_(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT) { - env_ = v8::Context::New(); env_->Enter(); } ~ContextInitializer() { env_->Exit(); - env_.Dispose(env_->GetIsolate()); } private: - v8::Persistent env_; v8::HandleScope scope_; + v8::Handle env_; v8::internal::ZoneScope zone_; }; diff --git a/test/cctest/test-serialize.cc b/test/cctest/test-serialize.cc index d236cf1..0cf8044 100644 --- a/test/cctest/test-serialize.cc +++ b/test/cctest/test-serialize.cc @@ -251,8 +251,11 @@ static void Serialize() { // can be loaded from v8natives.js and their addresses can be processed. This // will clear the pending fixups array, which would otherwise contain GC roots // that would confuse the serialization/deserialization process. - v8::Persistent env = v8::Context::New(); - env.Dispose(env->GetIsolate()); + { + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); + v8::Context::New(isolate); + } WriteToFile(FLAG_testing_serialization_file); } @@ -304,10 +307,11 @@ DEPENDENT_TEST(Deserialize, Serialize) { // serialization. That doesn't matter. We don't need to be able to // serialize a snapshot in a VM that is booted from a snapshot. if (!Snapshot::HaveASnapshotToStartFrom()) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); Deserialize(); - v8::Persistent env = v8::Context::New(); + v8::Local env = v8::Context::New(isolate); env->Enter(); SanityCheck(); @@ -317,10 +321,11 @@ DEPENDENT_TEST(Deserialize, Serialize) { DEPENDENT_TEST(DeserializeFromSecondSerialization, SerializeTwice) { if (!Snapshot::HaveASnapshotToStartFrom()) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); Deserialize(); - v8::Persistent env = v8::Context::New(); + v8::Local env = v8::Context::New(isolate); env->Enter(); SanityCheck(); @@ -330,10 +335,11 @@ DEPENDENT_TEST(DeserializeFromSecondSerialization, SerializeTwice) { DEPENDENT_TEST(DeserializeAndRunScript2, Serialize) { if (!Snapshot::HaveASnapshotToStartFrom()) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); Deserialize(); - v8::Persistent env = v8::Context::New(); + v8::Local env = v8::Context::New(isolate); env->Enter(); const char* c_source = "\"1234\".length"; @@ -347,10 +353,11 @@ DEPENDENT_TEST(DeserializeAndRunScript2, Serialize) { DEPENDENT_TEST(DeserializeFromSecondSerializationAndRunScript2, SerializeTwice) { if (!Snapshot::HaveASnapshotToStartFrom()) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope scope(isolate); Deserialize(); - v8::Persistent env = v8::Context::New(); + v8::Local env = v8::Context::New(isolate); env->Enter(); const char* c_source = "\"1234\".length"; @@ -368,7 +375,12 @@ TEST(PartialSerialization) { Isolate* isolate = Isolate::Current(); Heap* heap = isolate->heap(); - v8::Persistent env = v8::Context::New(); + v8::Persistent env; + { + HandleScope scope(isolate); + env.Reset(v8::Isolate::GetCurrent(), + v8::Context::New(v8::Isolate::GetCurrent())); + } ASSERT(!env.IsEmpty()); env->Enter(); // Make sure all builtin scripts are cached. @@ -502,7 +514,12 @@ TEST(ContextSerialization) { Isolate* isolate = Isolate::Current(); Heap* heap = isolate->heap(); - v8::Persistent env = v8::Context::New(); + v8::Persistent env; + { + HandleScope scope(isolate); + env.Reset(v8::Isolate::GetCurrent(), + v8::Context::New(v8::Isolate::GetCurrent())); + } ASSERT(!env.IsEmpty()); env->Enter(); // Make sure all builtin scripts are cached.