| Index: test/cctest/test-api.cc
|
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
|
| index c9685f8f4c07fa07914b68b4f15196543f29e815..1c17e8c9b3ca913923b98ba914f747ff2284e6aa 100644
|
| --- a/test/cctest/test-api.cc
|
| +++ b/test/cctest/test-api.cc
|
| @@ -4688,9 +4688,9 @@ THREADED_TEST(NamedInterceptorDictionaryIC) {
|
|
|
|
|
| THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope scope(isolate);
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
| +
|
| + v8::Persistent<Context> context1 = Context::New();
|
|
|
| context1->Enter();
|
| Local<ObjectTemplate> templ = ObjectTemplate::New();
|
| @@ -4725,6 +4725,8 @@ THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) {
|
| context1->Enter();
|
| CompileRun("var obj = { x : 0 }; delete obj.x;");
|
| context1->Exit();
|
| +
|
| + context1.Dispose(context1->GetIsolate());
|
| }
|
|
|
|
|
| @@ -5499,14 +5501,14 @@ static v8::Handle<Value> HandleLogDelegator(const v8::Arguments& args) {
|
|
|
|
|
| THREADED_TEST(GlobalObjectTemplate) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
| Local<ObjectTemplate> global_template = ObjectTemplate::New();
|
| global_template->Set(v8_str("JSNI_Log"),
|
| v8::FunctionTemplate::New(HandleLogDelegator));
|
| - v8::Local<Context> context = Context::New(isolate, 0, global_template);
|
| - Context::Scope context_scope(context);
|
| + v8::Persistent<Context> context = Context::New(0, global_template);
|
| + Context::Scope context_scope(v8::Isolate::GetCurrent(), context);
|
| Script::Compile(v8_str("JSNI_Log('LOG')"))->Run();
|
| + context.Dispose(context->GetIsolate());
|
| }
|
|
|
|
|
| @@ -7674,8 +7676,7 @@ static void UnreachableSetter(Local<String>, Local<Value>,
|
|
|
|
|
| TEST(AccessControl) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
| v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New();
|
|
|
| global_template->SetAccessCheckCallbacks(NamedAccessBlocker,
|
| @@ -7695,7 +7696,7 @@ TEST(AccessControl) {
|
| v8::DEFAULT);
|
|
|
| // Create an environment
|
| - v8::Local<Context> context0 = Context::New(isolate, NULL, global_template);
|
| + v8::Persistent<Context> context0 = Context::New(NULL, global_template);
|
| context0->Enter();
|
|
|
| v8::Handle<v8::Object> global0 = context0->Global();
|
| @@ -7721,9 +7722,9 @@ TEST(AccessControl) {
|
| Local<Value> el_getter = global0->Get(v8_str("el_getter"));
|
| Local<Value> el_setter = global0->Get(v8_str("el_setter"));
|
|
|
| - v8::HandleScope scope1(isolate);
|
| + v8::HandleScope scope1(v8::Isolate::GetCurrent());
|
|
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::Persistent<Context> context1 = Context::New();
|
| context1->Enter();
|
|
|
| v8::Handle<v8::Object> global1 = context1->Global();
|
| @@ -7913,12 +7914,13 @@ TEST(AccessControl) {
|
|
|
| context1->Exit();
|
| context0->Exit();
|
| + context1.Dispose(context1->GetIsolate());
|
| + context0.Dispose(context0->GetIsolate());
|
| }
|
|
|
|
|
| TEST(AccessControlES5) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
| v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New();
|
|
|
| global_template->SetAccessCheckCallbacks(NamedAccessBlocker,
|
| @@ -7939,12 +7941,12 @@ TEST(AccessControlES5) {
|
| v8::DEFAULT);
|
|
|
| // Create an environment
|
| - v8::Local<Context> context0 = Context::New(isolate, NULL, global_template);
|
| + v8::Persistent<Context> context0 = Context::New(NULL, global_template);
|
| context0->Enter();
|
|
|
| v8::Handle<v8::Object> global0 = context0->Global();
|
|
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::Persistent<Context> context1 = Context::New();
|
| context1->Enter();
|
| v8::Handle<v8::Object> global1 = context1->Global();
|
| global1->Set(v8_str("other"), global0);
|
| @@ -8004,8 +8006,7 @@ static bool GetOwnPropertyNamesIndexedBlocker(Local<v8::Object> global,
|
|
|
|
|
| THREADED_TEST(AccessControlGetOwnPropertyNames) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
| v8::Handle<v8::ObjectTemplate> obj_template = v8::ObjectTemplate::New();
|
|
|
| obj_template->Set(v8_str("x"), v8::Integer::New(42));
|
| @@ -8013,14 +8014,14 @@ THREADED_TEST(AccessControlGetOwnPropertyNames) {
|
| GetOwnPropertyNamesIndexedBlocker);
|
|
|
| // Create an environment
|
| - v8::Local<Context> context0 = Context::New(isolate, NULL, obj_template);
|
| + v8::Persistent<Context> context0 = Context::New(NULL, obj_template);
|
| context0->Enter();
|
|
|
| v8::Handle<v8::Object> global0 = context0->Global();
|
|
|
| v8::HandleScope scope1(v8::Isolate::GetCurrent());
|
|
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::Persistent<Context> context1 = Context::New();
|
| context1->Enter();
|
|
|
| v8::Handle<v8::Object> global1 = context1->Global();
|
| @@ -8042,6 +8043,8 @@ THREADED_TEST(AccessControlGetOwnPropertyNames) {
|
|
|
| context1->Exit();
|
| context0->Exit();
|
| + context1.Dispose(context1->GetIsolate());
|
| + context0.Dispose(context0->GetIsolate());
|
| }
|
|
|
|
|
| @@ -8097,8 +8100,7 @@ static v8::Handle<Value> ConstTenGetter(Local<String> name,
|
|
|
|
|
| THREADED_TEST(CrossDomainAccessors) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
|
|
| v8::Handle<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New();
|
|
|
| @@ -8120,7 +8122,7 @@ THREADED_TEST(CrossDomainAccessors) {
|
| v8::Handle<Value>(),
|
| v8::DEFAULT);
|
|
|
| - v8::Local<Context> context0 = Context::New(isolate, NULL, global_template);
|
| + v8::Persistent<Context> context0 = Context::New(NULL, global_template);
|
| context0->Enter();
|
|
|
| Local<v8::Object> global = context0->Global();
|
| @@ -8129,7 +8131,7 @@ THREADED_TEST(CrossDomainAccessors) {
|
|
|
| // Enter a new context.
|
| v8::HandleScope scope1(v8::Isolate::GetCurrent());
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::Persistent<Context> context1 = Context::New();
|
| context1->Enter();
|
|
|
| v8::Handle<v8::Object> global1 = context1->Global();
|
| @@ -8145,6 +8147,8 @@ THREADED_TEST(CrossDomainAccessors) {
|
|
|
| context1->Exit();
|
| context0->Exit();
|
| + context1.Dispose(context1->GetIsolate());
|
| + context0.Dispose(context0->GetIsolate());
|
| }
|
|
|
|
|
| @@ -8174,11 +8178,10 @@ TEST(AccessControlIC) {
|
| named_access_count = 0;
|
| indexed_access_count = 0;
|
|
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
|
|
| // Create an environment.
|
| - v8::Local<Context> context0 = Context::New(isolate);
|
| + v8::Persistent<Context> context0 = Context::New();
|
| context0->Enter();
|
|
|
| // Create an object that requires access-check functions to be
|
| @@ -8188,10 +8191,10 @@ TEST(AccessControlIC) {
|
| IndexedAccessCounter);
|
| Local<v8::Object> object = object_template->NewInstance();
|
|
|
| - v8::HandleScope scope1(isolate);
|
| + v8::HandleScope scope1(v8::Isolate::GetCurrent());
|
|
|
| // Create another environment.
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::Persistent<Context> context1 = Context::New();
|
| context1->Enter();
|
|
|
| // Make easy access to the object from the other environment.
|
| @@ -8279,6 +8282,8 @@ TEST(AccessControlIC) {
|
|
|
| context1->Exit();
|
| context0->Exit();
|
| + context1.Dispose(context1->GetIsolate());
|
| + context0.Dispose(context0->GetIsolate());
|
| }
|
|
|
|
|
| @@ -8322,11 +8327,10 @@ THREADED_TEST(AccessControlFlatten) {
|
| named_access_count = 0;
|
| indexed_access_count = 0;
|
|
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
|
|
| // Create an environment.
|
| - v8::Local<Context> context0 = Context::New(isolate);
|
| + v8::Persistent<Context> context0 = Context::New();
|
| context0->Enter();
|
|
|
| // Create an object that requires access-check functions to be
|
| @@ -8336,10 +8340,10 @@ THREADED_TEST(AccessControlFlatten) {
|
| IndexedAccessFlatten);
|
| Local<v8::Object> object = object_template->NewInstance();
|
|
|
| - v8::HandleScope scope1(isolate);
|
| + v8::HandleScope scope1(v8::Isolate::GetCurrent());
|
|
|
| // Create another environment.
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::Persistent<Context> context1 = Context::New();
|
| context1->Enter();
|
|
|
| // Make easy access to the object from the other environment.
|
| @@ -8353,6 +8357,8 @@ THREADED_TEST(AccessControlFlatten) {
|
|
|
| context1->Exit();
|
| context0->Exit();
|
| + context1.Dispose(context1->GetIsolate());
|
| + context0.Dispose(context0->GetIsolate());
|
| }
|
|
|
|
|
| @@ -8385,11 +8391,10 @@ THREADED_TEST(AccessControlInterceptorIC) {
|
| named_access_count = 0;
|
| indexed_access_count = 0;
|
|
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
|
|
| // Create an environment.
|
| - v8::Local<Context> context0 = Context::New(isolate);
|
| + v8::Persistent<Context> context0 = Context::New();
|
| context0->Enter();
|
|
|
| // Create an object that requires access-check functions to be
|
| @@ -8404,10 +8409,10 @@ THREADED_TEST(AccessControlInterceptorIC) {
|
| AccessControlIndexedSetter);
|
| Local<v8::Object> object = object_template->NewInstance();
|
|
|
| - v8::HandleScope scope1(isolate);
|
| + v8::HandleScope scope1(v8::Isolate::GetCurrent());
|
|
|
| // Create another environment.
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::Persistent<Context> context1 = Context::New();
|
| context1->Enter();
|
|
|
| // Make easy access to the object from the other environment.
|
| @@ -8444,6 +8449,8 @@ THREADED_TEST(AccessControlInterceptorIC) {
|
|
|
| context1->Exit();
|
| context0->Exit();
|
| + context1.Dispose(context1->GetIsolate());
|
| + context0.Dispose(context0->GetIsolate());
|
| }
|
|
|
|
|
| @@ -9304,11 +9311,10 @@ THREADED_TEST(CrossEval) {
|
| // its global throws an exception. This behavior is consistent with
|
| // other JavaScript implementations.
|
| THREADED_TEST(EvalInDetachedGlobal) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope scope(isolate);
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
|
|
| - v8::Local<Context> context0 = Context::New(isolate);
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::Persistent<Context> context0 = Context::New();
|
| + v8::Persistent<Context> context1 = Context::New();
|
|
|
| // Set up function in context0 that uses eval from context0.
|
| context0->Enter();
|
| @@ -9333,6 +9339,9 @@ THREADED_TEST(EvalInDetachedGlobal) {
|
| CHECK(x_value.IsEmpty());
|
| CHECK(catcher.HasCaught());
|
| context1->Exit();
|
| +
|
| + context1.Dispose(context1->GetIsolate());
|
| + context0.Dispose(context0->GetIsolate());
|
| }
|
|
|
|
|
| @@ -11965,7 +11974,7 @@ THREADED_TEST(CheckForCrossContextObjectLiterals) {
|
| }
|
|
|
|
|
| -static v8::Handle<Value> NestedScope(v8::Local<Context> env) {
|
| +static v8::Handle<Value> NestedScope(v8::Persistent<Context> env) {
|
| v8::HandleScope inner(env->GetIsolate());
|
| env->Enter();
|
| v8::Handle<Value> three = v8_num(3);
|
| @@ -11976,14 +11985,14 @@ static v8::Handle<Value> NestedScope(v8::Local<Context> env) {
|
|
|
|
|
| THREADED_TEST(NestedHandleScopeAndContexts) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope outer(isolate);
|
| - v8::Local<Context> env = Context::New(isolate);
|
| + v8::HandleScope outer(v8::Isolate::GetCurrent());
|
| + v8::Persistent<Context> env = Context::New();
|
| env->Enter();
|
| v8::Handle<Value> value = NestedScope(env);
|
| v8::Handle<String> str(value->ToString());
|
| CHECK(!str.IsEmpty());
|
| env->Exit();
|
| + env.Dispose(env->GetIsolate());
|
| }
|
|
|
|
|
| @@ -12015,9 +12024,8 @@ static void RunLoopInNewEnv() {
|
| bar_ptr = NULL;
|
| foo_ptr = NULL;
|
|
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope outer(isolate);
|
| - v8::Local<Context> env = Context::New(isolate);
|
| + v8::HandleScope outer(v8::Isolate::GetCurrent());
|
| + v8::Persistent<Context> env = Context::New();
|
| env->Enter();
|
|
|
| const char* script =
|
| @@ -12343,11 +12351,11 @@ static int64_t cast(intptr_t x) { return static_cast<int64_t>(x); }
|
|
|
|
|
| THREADED_TEST(ExternalAllocatedMemory) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope outer(isolate);
|
| - v8::Local<Context> env(Context::New(isolate));
|
| + v8::HandleScope outer(v8::Isolate::GetCurrent());
|
| + v8::Persistent<Context> env(Context::New());
|
| 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)));
|
| @@ -12358,14 +12366,8 @@ THREADED_TEST(ExternalAllocatedMemory) {
|
|
|
| THREADED_TEST(DisposeEnteredContext) {
|
| LocalContext outer;
|
| - v8::Isolate* isolate = outer->GetIsolate();
|
| - v8::Persistent<v8::Context> inner;
|
| - {
|
| - v8::HandleScope scope(isolate);
|
| - inner.Reset(isolate, v8::Context::New(isolate));
|
| - }
|
| - v8::HandleScope scope(isolate);
|
| - {
|
| + v8::HandleScope scope(outer->GetIsolate());
|
| + { v8::Persistent<v8::Context> inner = v8::Context::New();
|
| inner->Enter();
|
| inner.Dispose(inner->GetIsolate());
|
| inner.Clear();
|
| @@ -12685,8 +12687,7 @@ THREADED_TEST(AccessChecksReenabledCorrectly) {
|
| // This tests that access check information remains on the global
|
| // object template when creating contexts.
|
| THREADED_TEST(AccessControlRepeatedContextCreation) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
| v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New();
|
| global_template->SetAccessCheckCallbacks(NamedSetAccessBlocker,
|
| IndexedSetAccessBlocker);
|
| @@ -12696,15 +12697,14 @@ THREADED_TEST(AccessControlRepeatedContextCreation) {
|
| i::Handle<i::FunctionTemplateInfo> constructor(
|
| i::FunctionTemplateInfo::cast(internal_template->constructor()));
|
| CHECK(!constructor->access_check_info()->IsUndefined());
|
| - v8::Local<Context> context0(Context::New(isolate, NULL, global_template));
|
| + v8::Persistent<Context> context0(Context::New(NULL, global_template));
|
| CHECK(!context0.IsEmpty());
|
| CHECK(!constructor->access_check_info()->IsUndefined());
|
| }
|
|
|
|
|
| THREADED_TEST(TurnOnAccessCheck) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
|
|
| // Create an environment with access check to the global object disabled by
|
| // default.
|
| @@ -12713,8 +12713,8 @@ THREADED_TEST(TurnOnAccessCheck) {
|
| IndexedGetAccessBlocker,
|
| v8::Handle<v8::Value>(),
|
| false);
|
| - v8::Local<Context> context = Context::New(isolate, NULL, global_template);
|
| - Context::Scope context_scope(context);
|
| + v8::Persistent<Context> context = Context::New(NULL, global_template);
|
| + Context::Scope context_scope(v8::Isolate::GetCurrent(), context);
|
|
|
| // Set up a property and a number of functions.
|
| context->Global()->Set(v8_str("a"), v8_num(1));
|
| @@ -12784,8 +12784,7 @@ static bool NamedGetAccessBlockAandH(Local<v8::Object> obj,
|
|
|
|
|
| THREADED_TEST(TurnOnAccessCheckAndRecompile) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope handle_scope(isolate);
|
| + v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
|
|
|
| // Create an environment with access check to the global object disabled by
|
| // default. When the registered access checker will block access to properties
|
| @@ -12795,8 +12794,8 @@ THREADED_TEST(TurnOnAccessCheckAndRecompile) {
|
| IndexedGetAccessBlocker,
|
| v8::Handle<v8::Value>(),
|
| false);
|
| - v8::Local<Context> context = Context::New(isolate, NULL, global_template);
|
| - Context::Scope context_scope(context);
|
| + v8::Persistent<Context> context = Context::New(NULL, global_template);
|
| + Context::Scope context_scope(v8::Isolate::GetCurrent(), context);
|
|
|
| // Set up a property and a number of functions.
|
| context->Global()->Set(v8_str("a"), v8_num(1));
|
| @@ -13054,10 +13053,9 @@ 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::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope scope(isolate);
|
| - v8::Local<Context> context0 = Context::New(isolate);
|
| - v8::Local<Context> context1 = Context::New(isolate);
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
| + v8::Persistent<Context> context0 = Context::New();
|
| + v8::Persistent<Context> context1 = Context::New();
|
|
|
| // Allow cross-domain access.
|
| Local<String> token = v8_str("<security token>");
|
| @@ -13078,6 +13076,10 @@ 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());
|
| }
|
|
|
|
|
| @@ -13858,10 +13860,9 @@ THREADED_TEST(ForceDeleteIC) {
|
|
|
| TEST(InlinedFunctionAcrossContexts) {
|
| i::FLAG_allow_natives_syntax = true;
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope outer_scope(isolate);
|
| - v8::Local<v8::Context> ctx1 = v8::Context::New(isolate);
|
| - v8::Local<v8::Context> ctx2 = v8::Context::New(isolate);
|
| + v8::HandleScope outer_scope(v8::Isolate::GetCurrent());
|
| + v8::Persistent<v8::Context> ctx1 = v8::Context::New();
|
| + v8::Persistent<v8::Context> ctx2 = v8::Context::New();
|
| ctx1->Enter();
|
|
|
| {
|
| @@ -13891,13 +13892,15 @@ TEST(InlinedFunctionAcrossContexts) {
|
| "ReferenceError: G is not defined");
|
| ctx2->Exit();
|
| ctx1->Exit();
|
| + ctx1.Dispose(ctx1->GetIsolate());
|
| }
|
| + ctx2.Dispose(ctx2->GetIsolate());
|
| }
|
|
|
|
|
| -static v8::Local<Context> calling_context0;
|
| -static v8::Local<Context> calling_context1;
|
| -static v8::Local<Context> calling_context2;
|
| +v8::Persistent<Context> calling_context0;
|
| +v8::Persistent<Context> calling_context1;
|
| +v8::Persistent<Context> calling_context2;
|
|
|
|
|
| // Check that the call to the callback is initiated in
|
| @@ -13914,15 +13917,11 @@ static v8::Handle<Value> GetCallingContextCallback(const v8::Arguments& args) {
|
|
|
|
|
| THREADED_TEST(GetCallingContext) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope scope(isolate);
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
|
|
| - Local<Context> calling_context0(Context::New(isolate));
|
| - Local<Context> calling_context1(Context::New(isolate));
|
| - Local<Context> calling_context2(Context::New(isolate));
|
| - ::calling_context0 = calling_context0;
|
| - ::calling_context1 = calling_context1;
|
| - ::calling_context2 = calling_context2;
|
| + calling_context0 = Context::New();
|
| + calling_context1 = Context::New();
|
| + calling_context2 = Context::New();
|
|
|
| // Allow cross-domain access.
|
| Local<String> token = v8_str("<security token>");
|
| @@ -13953,9 +13952,14 @@ THREADED_TEST(GetCallingContext) {
|
| calling_context1->Global());
|
| CompileRun("context1.f()");
|
| calling_context2->Exit();
|
| - ::calling_context0.Clear();
|
| - ::calling_context1.Clear();
|
| - ::calling_context2.Clear();
|
| +
|
| + // 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();
|
| }
|
|
|
|
|
| @@ -15800,20 +15804,17 @@ 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::HandleScope inner_scope(env->GetIsolate());
|
| - v8::Local<v8::Context> ctx = v8::Context::New(isolate);
|
| - ctx->Enter();
|
| - CreateGarbageInOldSpace();
|
| - ctx->Exit();
|
| - }
|
| + v8::Persistent<v8::Context> ctx = v8::Context::New();
|
| + ctx->Enter();
|
| + CreateGarbageInOldSpace();
|
| + ctx->Exit();
|
| + ctx.Dispose(ctx->GetIsolate());
|
| v8::V8::ContextDisposedNotification();
|
| v8::V8::IdleNotification(kLongIdlePauseInMs);
|
| }
|
| @@ -16142,21 +16143,22 @@ THREADED_TEST(SpaghettiStackReThrow) {
|
|
|
| TEST(Regress528) {
|
| v8::V8::Initialize();
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - v8::HandleScope scope(isolate);
|
| - v8::Local<Context> other_context;
|
| +
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
| + v8::Persistent<Context> context;
|
| + v8::Persistent<Context> other_context;
|
| int gc_count;
|
|
|
| // Create a context used to keep the code from aging in the compilation
|
| // cache.
|
| - other_context = Context::New(isolate);
|
| + other_context = Context::New();
|
|
|
| // 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(isolate);
|
| - v8::Local<Context> context = Context::New(isolate);
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
|
|
| context->Enter();
|
| Local<v8::String> obj = v8::String::New("");
|
| @@ -16164,6 +16166,7 @@ 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();
|
| @@ -16178,14 +16181,15 @@ 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(isolate);
|
| - v8::Local<Context> context = Context::New(isolate);
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
|
|
| 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();
|
| @@ -16200,9 +16204,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(isolate);
|
| - v8::Local<Context> context = Context::New(isolate);
|
| + v8::HandleScope scope(v8::Isolate::GetCurrent());
|
|
|
| context->Enter();
|
| v8::TryCatch try_catch;
|
| @@ -16213,6 +16217,7 @@ 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();
|
| @@ -16224,6 +16229,7 @@ TEST(Regress528) {
|
| CHECK_GE(2, gc_count);
|
| CHECK_EQ(1, GetGlobalObjectsCount());
|
|
|
| + other_context.Dispose(other_context->GetIsolate());
|
| v8::V8::ContextDisposedNotification();
|
| }
|
|
|
| @@ -16940,11 +16946,7 @@ TEST(RunTwoIsolatesOnSingleThread) {
|
| // Run isolate 1.
|
| v8::Isolate* isolate1 = v8::Isolate::New();
|
| isolate1->Enter();
|
| - v8::Persistent<v8::Context> context1;
|
| - {
|
| - v8::HandleScope scope(isolate1);
|
| - context1.Reset(isolate1, Context::New(isolate1));
|
| - }
|
| + v8::Persistent<v8::Context> context1 = v8::Context::New();
|
|
|
| {
|
| v8::HandleScope scope(isolate1);
|
| @@ -16960,8 +16962,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.
|
| @@ -16979,13 +16981,7 @@ TEST(RunTwoIsolatesOnSingleThread) {
|
| isolate1->Exit();
|
|
|
| // Run some stuff in default isolate.
|
| - v8::Persistent<v8::Context> 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::Persistent<v8::Context> context_default = v8::Context::New();
|
|
|
| {
|
| v8::HandleScope scope(v8::Isolate::GetCurrent());
|
| @@ -17111,12 +17107,12 @@ TEST(MultipleIsolatesOnIndividualThreads) {
|
|
|
| TEST(IsolateDifferentContexts) {
|
| v8::Isolate* isolate = v8::Isolate::New();
|
| - Local<v8::Context> context;
|
| + Persistent<v8::Context> context;
|
| {
|
| v8::Isolate::Scope isolate_scope(isolate);
|
| v8::HandleScope handle_scope(isolate);
|
| - context = v8::Context::New(isolate);
|
| - v8::Context::Scope context_scope(context);
|
| + context = v8::Context::New();
|
| + v8::Context::Scope context_scope(isolate, context);
|
| Local<Value> v = CompileRun("2");
|
| CHECK(v->IsNumber());
|
| CHECK_EQ(2, static_cast<int>(v->NumberValue()));
|
| @@ -17124,12 +17120,13 @@ TEST(IsolateDifferentContexts) {
|
| {
|
| v8::Isolate::Scope isolate_scope(isolate);
|
| v8::HandleScope handle_scope(isolate);
|
| - context = v8::Context::New(isolate);
|
| - v8::Context::Scope context_scope(context);
|
| + context = v8::Context::New();
|
| + v8::Context::Scope context_scope(isolate, context);
|
| Local<Value> v = CompileRun("22");
|
| CHECK(v->IsNumber());
|
| CHECK_EQ(22, static_cast<int>(v->NumberValue()));
|
| }
|
| + isolate->Dispose();
|
| }
|
|
|
| class InitDefaultIsolateThread : public v8::internal::Thread {
|
| @@ -18018,8 +18015,7 @@ static bool BlockProtoNamedSecurityTestCallback(Local<v8::Object> global,
|
|
|
|
|
| THREADED_TEST(Regress93759) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - HandleScope scope(isolate);
|
| + HandleScope scope(v8::Isolate::GetCurrent());
|
|
|
| // Template for object with security check.
|
| Local<ObjectTemplate> no_proto_template = v8::ObjectTemplate::New();
|
| @@ -18040,7 +18036,7 @@ THREADED_TEST(Regress93759) {
|
| protected_hidden_proto_template->SetHiddenPrototype(true);
|
|
|
| // Context for "foreign" objects used in test.
|
| - Local<Context> context = v8::Context::New(isolate);
|
| + Persistent<Context> context = v8::Context::New();
|
| context->Enter();
|
|
|
| // Plain object, no security check.
|
| @@ -18104,6 +18100,8 @@ THREADED_TEST(Regress93759) {
|
|
|
| Local<Value> result6 = CompileRun("Object.getPrototypeOf(phidden)");
|
| CHECK(result6->Equals(Undefined()));
|
| +
|
| + context.Dispose(context->GetIsolate());
|
| }
|
|
|
|
|
| @@ -18142,15 +18140,14 @@ static void TestReceiver(Local<Value> expected_result,
|
|
|
|
|
| THREADED_TEST(ForeignFunctionReceiver) {
|
| - v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - HandleScope scope(isolate);
|
| + HandleScope scope(v8::Isolate::GetCurrent());
|
|
|
| // 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).
|
|
|
| - Local<Context> foreign_context = v8::Context::New(isolate);
|
| + Persistent<Context> foreign_context = v8::Context::New();
|
| foreign_context->Enter();
|
| Local<Value> foreign_function =
|
| CompileRun("function func() { return { 0: this.id, "
|
| @@ -18231,6 +18228,8 @@ THREADED_TEST(ForeignFunctionReceiver) {
|
| TestReceiver(o, context->Global(), "func()");
|
| // Calling with no base.
|
| TestReceiver(o, context->Global(), "(1,func)()");
|
| +
|
| + foreign_context.Dispose(foreign_context->GetIsolate());
|
| }
|
|
|
|
|
|
|