Chromium Code Reviews| Index: test/cctest/test-api.cc |
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
| index d3b88245bb0c3aad0f750a87f51c51d987a4f49c..f19d53bb33630d6399a474ae0a35796288105b3e 100644 |
| --- a/test/cctest/test-api.cc |
| +++ b/test/cctest/test-api.cc |
| @@ -181,7 +181,7 @@ THREADED_TEST(IsolateOfContext) { |
| CHECK(!env->InContext()); |
| CHECK(env->GetIsolate() == v8::Isolate::GetCurrent()); |
| - env.Dispose(); |
| + env.Dispose(env->GetIsolate()); |
| } |
| @@ -2324,7 +2324,7 @@ THREADED_TEST(GlobalHandle) { |
| global = v8::Persistent<String>::New(str); |
| } |
| CHECK_EQ(global->Length(), 3); |
| - global.Dispose(); |
| + global.Dispose(v8::Isolate::GetCurrent()); |
| { |
| v8::HandleScope scope; |
| @@ -2358,17 +2358,20 @@ class WeakCallCounter { |
| }; |
| -static void WeakPointerCallback(Persistent<Value> handle, void* id) { |
| +static void WeakPointerCallback(v8::Isolate* isolate, |
| + Persistent<Value> handle, |
| + void* id) { |
| WeakCallCounter* counter = reinterpret_cast<WeakCallCounter*>(id); |
| CHECK_EQ(1234, counter->id()); |
| counter->increment(); |
| - handle.Dispose(); |
| + handle.Dispose(isolate); |
| } |
| THREADED_TEST(ApiObjectGroups) { |
| HandleScope scope; |
| LocalContext env; |
| + v8::Isolate* iso = env->GetIsolate(); |
| Persistent<Object> g1s1; |
| Persistent<Object> g1s2; |
| @@ -2384,16 +2387,16 @@ THREADED_TEST(ApiObjectGroups) { |
| g1s1 = Persistent<Object>::New(Object::New()); |
| g1s2 = Persistent<Object>::New(Object::New()); |
| g1c1 = Persistent<Object>::New(Object::New()); |
| - g1s1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g1s2.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g1c1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g1s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g1s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g1c1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| g2s1 = Persistent<Object>::New(Object::New()); |
| g2s2 = Persistent<Object>::New(Object::New()); |
| g2c1 = Persistent<Object>::New(Object::New()); |
| - g2s1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g2s2.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g2c1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g2s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g2s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g2c1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| } |
| Persistent<Object> root = Persistent<Object>::New(g1s1); // make a root. |
| @@ -2419,11 +2422,11 @@ THREADED_TEST(ApiObjectGroups) { |
| CHECK_EQ(0, counter.NumberOfWeakCalls()); |
| // Weaken the root. |
| - root.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + root.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| // But make children strong roots---all the objects (except for children) |
| // should be collectable now. |
| - g1c1.ClearWeak(); |
| - g2c1.ClearWeak(); |
| + g1c1.ClearWeak(iso); |
| + g2c1.ClearWeak(iso); |
| // Groups are deleted, rebuild groups. |
| { |
| @@ -2443,8 +2446,8 @@ THREADED_TEST(ApiObjectGroups) { |
| CHECK_EQ(5, counter.NumberOfWeakCalls()); |
| // And now make children weak again and collect them. |
| - g1c1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g2c1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g1c1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g2c1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| HEAP->CollectAllGarbage(i::Heap::kAbortIncrementalMarkingMask); |
| CHECK_EQ(7, counter.NumberOfWeakCalls()); |
| @@ -2454,6 +2457,7 @@ THREADED_TEST(ApiObjectGroups) { |
| THREADED_TEST(ApiObjectGroupsCycle) { |
| HandleScope scope; |
| LocalContext env; |
| + v8::Isolate* iso = env->GetIsolate(); |
| WeakCallCounter counter(1234); |
| @@ -2466,38 +2470,35 @@ THREADED_TEST(ApiObjectGroupsCycle) { |
| Persistent<Object> g4s1; |
| Persistent<Object> g4s2; |
| - v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| { |
| HandleScope scope; |
| g1s1 = Persistent<Object>::New(Object::New()); |
| g1s2 = Persistent<Object>::New(Object::New()); |
| - g1s1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g1s2.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - CHECK(g1s1.IsWeak()); |
| - CHECK(g1s2.IsWeak()); |
| + g1s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g1s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + CHECK(g1s1.IsWeak(iso)); |
| + CHECK(g1s2.IsWeak(iso)); |
| g2s1 = Persistent<Object>::New(Object::New()); |
| g2s2 = Persistent<Object>::New(Object::New()); |
| - g2s1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g2s2.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - CHECK(g2s1.IsWeak()); |
| - CHECK(g2s2.IsWeak()); |
| + g2s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g2s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + CHECK(g2s1.IsWeak(iso)); |
| + CHECK(g2s2.IsWeak(iso)); |
| g3s1 = Persistent<Object>::New(Object::New()); |
| g3s2 = Persistent<Object>::New(Object::New()); |
| - g3s1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g3s2.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - CHECK(g3s1.IsWeak()); |
| - CHECK(g3s2.IsWeak()); |
| + g3s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g3s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + CHECK(g3s1.IsWeak(iso)); |
| + CHECK(g3s2.IsWeak(iso)); |
| g4s1 = Persistent<Object>::New(Object::New()); |
| g4s2 = Persistent<Object>::New(Object::New()); |
| - g4s1.MakeWeak(isolate, |
| - reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g4s2.MakeWeak(isolate, |
| - reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - CHECK(g4s1.IsWeak(isolate)); |
| - CHECK(g4s2.IsWeak(isolate)); |
| + g4s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g4s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + CHECK(g4s1.IsWeak(iso)); |
| + CHECK(g4s2.IsWeak(iso)); |
| } |
| Persistent<Object> root = Persistent<Object>::New(g1s1); // make a root. |
| @@ -2520,7 +2521,7 @@ THREADED_TEST(ApiObjectGroupsCycle) { |
| V8::AddImplicitReferences(g2s1, g2_children, 1); |
| V8::AddObjectGroup(g3_objects, 2); |
| V8::AddImplicitReferences(g3s1, g3_children, 1); |
| - V8::AddObjectGroup(isolate, g4_objects, 2); |
| + V8::AddObjectGroup(iso, g4_objects, 2); |
| V8::AddImplicitReferences(g4s1, g4_children, 1); |
| } |
| // Do a single full GC |
| @@ -2530,7 +2531,7 @@ THREADED_TEST(ApiObjectGroupsCycle) { |
| CHECK_EQ(0, counter.NumberOfWeakCalls()); |
| // Weaken the root. |
| - root.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + root.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| // Groups are deleted, rebuild groups. |
| { |
| @@ -2566,6 +2567,7 @@ TEST(ApiObjectGroupsCycleForScavenger) { |
| i::FLAG_gc_global = false; |
| HandleScope scope; |
| LocalContext env; |
| + v8::Isolate* iso = env->GetIsolate(); |
| WeakCallCounter counter(1234); |
| @@ -2580,34 +2582,34 @@ TEST(ApiObjectGroupsCycleForScavenger) { |
| HandleScope scope; |
| g1s1 = Persistent<Object>::New(Object::New()); |
| g1s2 = Persistent<Object>::New(Object::New()); |
| - g1s1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g1s2.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g1s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g1s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| g2s1 = Persistent<Object>::New(Object::New()); |
| g2s2 = Persistent<Object>::New(Object::New()); |
| - g2s1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g2s2.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g2s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g2s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| g3s1 = Persistent<Object>::New(Object::New()); |
| g3s2 = Persistent<Object>::New(Object::New()); |
| - g3s1.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - g3s2.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g3s1.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + g3s2.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| } |
| // Make a root. |
| Persistent<Object> root = Persistent<Object>::New(g1s1); |
| - root.MarkPartiallyDependent(); |
| + root.MarkPartiallyDependent(iso); |
| // Connect groups. We're building the following cycle: |
| // G1: { g1s1, g2s1 }, g1s1 implicitly references g2s1, ditto for other |
| // groups. |
| { |
| - g1s1.MarkPartiallyDependent(); |
| - g1s2.MarkPartiallyDependent(); |
| - g2s1.MarkPartiallyDependent(); |
| - g2s2.MarkPartiallyDependent(); |
| - g3s1.MarkPartiallyDependent(); |
| - g3s2.MarkPartiallyDependent(); |
| + g1s1.MarkPartiallyDependent(iso); |
| + g1s2.MarkPartiallyDependent(iso); |
| + g2s1.MarkPartiallyDependent(iso); |
| + g2s2.MarkPartiallyDependent(iso); |
| + g3s1.MarkPartiallyDependent(iso); |
| + g3s2.MarkPartiallyDependent(iso); |
| Persistent<Value> g1_objects[] = { g1s1, g1s2 }; |
| Persistent<Value> g2_objects[] = { g2s1, g2s2 }; |
| Persistent<Value> g3_objects[] = { g3s1, g3s2 }; |
| @@ -2625,8 +2627,8 @@ TEST(ApiObjectGroupsCycleForScavenger) { |
| CHECK_EQ(0, counter.NumberOfWeakCalls()); |
| // Weaken the root. |
| - root.MakeWeak(reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| - root.MarkPartiallyDependent(); |
| + root.MakeWeak(iso, reinterpret_cast<void*>(&counter), &WeakPointerCallback); |
| + root.MarkPartiallyDependent(iso); |
| v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| // Groups are deleted, rebuild groups. |
| @@ -3784,7 +3786,7 @@ THREADED_TEST(Equality) { |
| v8::Handle<v8::Object> obj = v8::Object::New(); |
| v8::Persistent<v8::Object> alias = v8::Persistent<v8::Object>::New(obj); |
| CHECK(alias->StrictEquals(obj)); |
| - alias.Dispose(); |
| + alias.Dispose(context->GetIsolate()); |
| } |
| @@ -4097,7 +4099,7 @@ THREADED_TEST(SimplePropertyWrite) { |
| CHECK(xValue.IsEmpty()); |
| script->Run(); |
| CHECK_EQ(v8_num(4), xValue); |
| - xValue.Dispose(); |
| + xValue.Dispose(context->GetIsolate()); |
| xValue = v8::Persistent<Value>(); |
| } |
| } |
| @@ -4114,7 +4116,7 @@ THREADED_TEST(SetterOnly) { |
| CHECK(xValue.IsEmpty()); |
| script->Run(); |
| CHECK_EQ(v8_num(4), xValue); |
| - xValue.Dispose(); |
| + xValue.Dispose(context->GetIsolate()); |
| xValue = v8::Persistent<Value>(); |
| } |
| } |
| @@ -4224,7 +4226,7 @@ THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) { |
| CompileRun("var obj = { x : 0 }; delete obj.x;"); |
| context1->Exit(); |
| - context1.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| } |
| @@ -5006,7 +5008,7 @@ THREADED_TEST(GlobalObjectTemplate) { |
| v8::Persistent<Context> context = Context::New(0, global_template); |
| Context::Scope context_scope(context); |
| Script::Compile(v8_str("JSNI_Log('LOG')"))->Run(); |
| - context.Dispose(); |
| + context.Dispose(context->GetIsolate()); |
| } |
| @@ -5479,7 +5481,7 @@ class Whammy { |
| cursor_ = 0; |
| } |
| ~Whammy() { |
| - script_.Dispose(); |
| + script_.Dispose(v8::Isolate::GetCurrent()); |
| } |
| v8::Handle<Script> getScript() { |
| if (script_.IsEmpty()) |
| @@ -5494,10 +5496,12 @@ class Whammy { |
| v8::Persistent<Script> script_; |
| }; |
| -static void HandleWeakReference(v8::Persistent<v8::Value> obj, void* data) { |
| +static void HandleWeakReference(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> obj, |
| + void* data) { |
| Snorkel* snorkel = reinterpret_cast<Snorkel*>(data); |
| delete snorkel; |
| - obj.ClearWeak(); |
| + obj.ClearWeak(isolate); |
| } |
| v8::Handle<Value> WhammyPropertyGetter(Local<String> name, |
| @@ -5511,7 +5515,8 @@ v8::Handle<Value> WhammyPropertyGetter(Local<String> name, |
| v8::Persistent<v8::Object> global = v8::Persistent<v8::Object>::New(obj); |
| if (!prev.IsEmpty()) { |
| prev->Set(v8_str("next"), obj); |
| - prev.MakeWeak(new Snorkel(), &HandleWeakReference); |
| + v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| + prev.MakeWeak(isolate, new Snorkel(), &HandleWeakReference); |
|
Michael Starzinger
2013/01/24 13:09:05
Can we use info.GetIsolate() here?
Sven Panne
2013/01/25 08:28:40
Done.
|
| whammy->objects_[whammy->cursor_].Clear(); |
| } |
| whammy->objects_[whammy->cursor_] = global; |
| @@ -5545,12 +5550,14 @@ THREADED_TEST(WeakReference) { |
| v8::Handle<Value> result = CompileRun(code); |
| CHECK_EQ(4.0, result->NumberValue()); |
| delete whammy; |
| - context.Dispose(); |
| + context.Dispose(context->GetIsolate()); |
| } |
| -static void DisposeAndSetFlag(v8::Persistent<v8::Value> obj, void* data) { |
| - obj.Dispose(); |
| +static void DisposeAndSetFlag(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> obj, |
| + void* data) { |
| + obj.Dispose(isolate); |
| obj.Clear(); |
| *(reinterpret_cast<bool*>(data)) = true; |
| } |
| @@ -5558,6 +5565,7 @@ static void DisposeAndSetFlag(v8::Persistent<v8::Value> obj, void* data) { |
| THREADED_TEST(IndependentWeakHandle) { |
| v8::Persistent<Context> context = Context::New(); |
| + v8::Isolate* iso = context->GetIsolate(); |
| Context::Scope context_scope(context); |
| v8::Persistent<v8::Object> object_a, object_b; |
| @@ -5568,17 +5576,14 @@ THREADED_TEST(IndependentWeakHandle) { |
| object_b = v8::Persistent<v8::Object>::New(v8::Object::New()); |
| } |
| - v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| bool object_a_disposed = false; |
| bool object_b_disposed = false; |
| - object_a.MakeWeak(&object_a_disposed, &DisposeAndSetFlag); |
| - object_b.MakeWeak(&object_b_disposed, &DisposeAndSetFlag); |
| - CHECK(!object_a.IsIndependent()); |
| - CHECK(!object_b.IsIndependent(isolate)); |
| - object_a.MarkIndependent(); |
| - object_b.MarkIndependent(isolate); |
| - CHECK(object_a.IsIndependent()); |
| - CHECK(object_b.IsIndependent(isolate)); |
| + object_a.MakeWeak(iso, &object_a_disposed, &DisposeAndSetFlag); |
| + object_b.MakeWeak(iso, &object_b_disposed, &DisposeAndSetFlag); |
| + CHECK(!object_b.IsIndependent(iso)); |
| + object_a.MarkIndependent(iso); |
| + object_b.MarkIndependent(iso); |
| + CHECK(object_b.IsIndependent(iso)); |
| HEAP->PerformScavenge(); |
| CHECK(object_a_disposed); |
| CHECK(object_b_disposed); |
| @@ -5595,16 +5600,20 @@ static void InvokeMarkSweep() { |
| } |
| -static void ForceScavenge(v8::Persistent<v8::Value> obj, void* data) { |
| - obj.Dispose(); |
| +static void ForceScavenge(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> obj, |
| + void* data) { |
| + obj.Dispose(isolate); |
| obj.Clear(); |
| *(reinterpret_cast<bool*>(data)) = true; |
| InvokeScavenge(); |
| } |
| -static void ForceMarkSweep(v8::Persistent<v8::Value> obj, void* data) { |
| - obj.Dispose(); |
| +static void ForceMarkSweep(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> obj, |
| + void* data) { |
| + obj.Dispose(isolate); |
| obj.Clear(); |
| *(reinterpret_cast<bool*>(data)) = true; |
| InvokeMarkSweep(); |
| @@ -5616,7 +5625,7 @@ THREADED_TEST(GCFromWeakCallbacks) { |
| Context::Scope context_scope(context); |
| static const int kNumberOfGCTypes = 2; |
| - v8::WeakReferenceCallback gc_forcing_callback[kNumberOfGCTypes] = |
| + v8::NearDeathCallback gc_forcing_callback[kNumberOfGCTypes] = |
| {&ForceScavenge, &ForceMarkSweep}; |
| typedef void (*GCInvoker)(); |
| @@ -5630,8 +5639,9 @@ THREADED_TEST(GCFromWeakCallbacks) { |
| object = v8::Persistent<v8::Object>::New(v8::Object::New()); |
| } |
| bool disposed = false; |
| - object.MakeWeak(&disposed, gc_forcing_callback[inner_gc]); |
| - object.MarkIndependent(); |
| + v8::Isolate* isolate = context->GetIsolate(); |
| + object.MakeWeak(isolate, &disposed, gc_forcing_callback[inner_gc]); |
| + object.MarkIndependent(isolate); |
| invoke_gc[outer_gc](); |
| CHECK(disposed); |
| } |
| @@ -5639,8 +5649,10 @@ THREADED_TEST(GCFromWeakCallbacks) { |
| } |
| -static void RevivingCallback(v8::Persistent<v8::Value> obj, void* data) { |
| - obj.ClearWeak(); |
| +static void RevivingCallback(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> obj, |
| + void* data) { |
| + obj.ClearWeak(isolate); |
| *(reinterpret_cast<bool*>(data)) = true; |
| } |
| @@ -5648,6 +5660,7 @@ static void RevivingCallback(v8::Persistent<v8::Value> obj, void* data) { |
| THREADED_TEST(IndependentHandleRevival) { |
| v8::Persistent<Context> context = Context::New(); |
| Context::Scope context_scope(context); |
| + v8::Isolate* isolate = context->GetIsolate(); |
| v8::Persistent<v8::Object> object; |
| { |
| @@ -5658,8 +5671,8 @@ THREADED_TEST(IndependentHandleRevival) { |
| object->Set(y_str, y_str); |
| } |
| bool revived = false; |
| - object.MakeWeak(&revived, &RevivingCallback); |
| - object.MarkIndependent(); |
| + object.MakeWeak(isolate, &revived, &RevivingCallback); |
| + object.MarkIndependent(isolate); |
| HEAP->PerformScavenge(); |
| CHECK(revived); |
| HEAP->CollectAllGarbage(i::Heap::kAbortIncrementalMarkingMask); |
| @@ -6755,10 +6768,10 @@ TEST(SecurityHandler) { |
| } |
| context1->Exit(); |
| - context1.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| context0->Exit(); |
| - context0.Dispose(); |
| + context0.Dispose(context0->GetIsolate()); |
| } |
| @@ -6802,7 +6815,7 @@ THREADED_TEST(SecurityChecks) { |
| CHECK(try_catch.HasCaught()); |
| } |
| - env2.Dispose(); |
| + env2.Dispose(env2->GetIsolate()); |
| } |
| @@ -6871,7 +6884,7 @@ THREADED_TEST(SecurityChecksForPrototypeChain) { |
| CHECK(!access_f3->Run()->Equals(v8_num(101))); |
| CHECK(access_f3->Run()->IsUndefined()); |
| } |
| - other.Dispose(); |
| + other.Dispose(other->GetIsolate()); |
| } |
| @@ -6904,7 +6917,7 @@ THREADED_TEST(CrossDomainDelete) { |
| CHECK(v->IsNumber()); |
| CHECK_EQ(3, v->Int32Value()); |
| - env2.Dispose(); |
| + env2.Dispose(env2->GetIsolate()); |
| } |
| @@ -6939,7 +6952,7 @@ THREADED_TEST(CrossDomainIsPropertyEnumerable) { |
| CHECK(result->IsFalse()); |
| } |
| - env2.Dispose(); |
| + env2.Dispose(env2->GetIsolate()); |
| } |
| @@ -6972,7 +6985,7 @@ THREADED_TEST(CrossDomainForIn) { |
| "return true;})()"); |
| CHECK(result->IsTrue()); |
| } |
| - env2.Dispose(); |
| + env2.Dispose(env2->GetIsolate()); |
| } |
| @@ -7035,8 +7048,8 @@ TEST(ContextDetachGlobal) { |
| CHECK(r->IsUndefined()); |
| } |
| - env2.Dispose(); |
| - env3.Dispose(); |
| + env2.Dispose(env2->GetIsolate()); |
| + env3.Dispose(env3->GetIsolate()); |
| } |
| @@ -7114,8 +7127,8 @@ TEST(DetachAndReattachGlobal) { |
| CHECK(result->IsInt32()); |
| CHECK_EQ(42, result->Int32Value()); |
| - env2.Dispose(); |
| - env3.Dispose(); |
| + env2.Dispose(env2->GetIsolate()); |
| + env3.Dispose(env3->GetIsolate()); |
| } |
| @@ -7405,8 +7418,8 @@ TEST(AccessControl) { |
| context1->Exit(); |
| context0->Exit(); |
| - context1.Dispose(); |
| - context0.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| + context0.Dispose(context0->GetIsolate()); |
| } |
| @@ -7534,8 +7547,8 @@ THREADED_TEST(AccessControlGetOwnPropertyNames) { |
| context1->Exit(); |
| context0->Exit(); |
| - context1.Dispose(); |
| - context0.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| + context0.Dispose(context0->GetIsolate()); |
| } |
| @@ -7618,8 +7631,8 @@ THREADED_TEST(CrossDomainAccessors) { |
| context1->Exit(); |
| context0->Exit(); |
| - context1.Dispose(); |
| - context0.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| + context0.Dispose(context0->GetIsolate()); |
| } |
| @@ -7753,8 +7766,8 @@ TEST(AccessControlIC) { |
| context1->Exit(); |
| context0->Exit(); |
| - context1.Dispose(); |
| - context0.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| + context0.Dispose(context0->GetIsolate()); |
| } |
| @@ -7828,8 +7841,8 @@ THREADED_TEST(AccessControlFlatten) { |
| context1->Exit(); |
| context0->Exit(); |
| - context1.Dispose(); |
| - context0.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| + context0.Dispose(context0->GetIsolate()); |
| } |
| @@ -7920,8 +7933,8 @@ THREADED_TEST(AccessControlInterceptorIC) { |
| context1->Exit(); |
| context0->Exit(); |
| - context1.Dispose(); |
| - context0.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| + context0.Dispose(context0->GetIsolate()); |
| } |
| @@ -8811,8 +8824,8 @@ THREADED_TEST(EvalInDetachedGlobal) { |
| CHECK(catcher.HasCaught()); |
| context1->Exit(); |
| - context1.Dispose(); |
| - context0.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| + context0.Dispose(context0->GetIsolate()); |
| } |
| @@ -11329,10 +11342,12 @@ TEST(DontLeakGlobalObjects) { |
| v8::Persistent<v8::Object> some_object; |
| v8::Persistent<v8::Object> bad_handle; |
| -void NewPersistentHandleCallback(v8::Persistent<v8::Value> handle, void*) { |
| +void NewPersistentHandleCallback(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> handle, |
| + void*) { |
| v8::HandleScope scope; |
| bad_handle = v8::Persistent<v8::Object>::New(some_object); |
| - handle.Dispose(); |
| + handle.Dispose(isolate); |
| } |
| @@ -11350,18 +11365,21 @@ THREADED_TEST(NewPersistentHandleFromWeakCallback) { |
| // global handle nodes are processed by PostGarbageCollectionProcessing |
| // in reverse allocation order, so if second allocated handle is deleted, |
| // weak callback of the first handle would be able to 'reallocate' it. |
| - handle1.MakeWeak(NULL, NewPersistentHandleCallback); |
| - handle2.Dispose(); |
| + v8::Isolate* isolate = context->GetIsolate(); |
| + handle1.MakeWeak(isolate, NULL, NewPersistentHandleCallback); |
| + handle2.Dispose(isolate); |
| HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| } |
| v8::Persistent<v8::Object> to_be_disposed; |
| -void DisposeAndForceGcCallback(v8::Persistent<v8::Value> handle, void*) { |
| - to_be_disposed.Dispose(); |
| +void DisposeAndForceGcCallback(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> handle, |
| + void*) { |
| + to_be_disposed.Dispose(isolate); |
| HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| - handle.Dispose(); |
| + handle.Dispose(isolate); |
| } |
| @@ -11374,24 +11392,29 @@ THREADED_TEST(DoNotUseDeletedNodesInSecondLevelGc) { |
| handle1 = v8::Persistent<v8::Object>::New(v8::Object::New()); |
| handle2 = v8::Persistent<v8::Object>::New(v8::Object::New()); |
| } |
| - handle1.MakeWeak(NULL, DisposeAndForceGcCallback); |
| + handle1.MakeWeak(context->GetIsolate(), NULL, DisposeAndForceGcCallback); |
| to_be_disposed = handle2; |
| HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| } |
| -void DisposingCallback(v8::Persistent<v8::Value> handle, void*) { |
| - handle.Dispose(); |
| +void DisposingCallback(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> handle, |
| + void*) { |
| + handle.Dispose(isolate); |
| } |
| -void HandleCreatingCallback(v8::Persistent<v8::Value> handle, void*) { |
| +void HandleCreatingCallback(v8::Isolate* isolate, |
| + v8::Persistent<v8::Value> handle, |
| + void*) { |
| v8::HandleScope scope; |
| v8::Persistent<v8::Object>::New(v8::Object::New()); |
| - handle.Dispose(); |
| + handle.Dispose(isolate); |
| } |
| THREADED_TEST(NoGlobalHandlesOrphaningDueToWeakCallback) { |
| LocalContext context; |
| + v8::Isolate* isolate = context->GetIsolate(); |
| v8::Persistent<v8::Object> handle1, handle2, handle3; |
| { |
| @@ -11400,8 +11423,8 @@ THREADED_TEST(NoGlobalHandlesOrphaningDueToWeakCallback) { |
| handle2 = v8::Persistent<v8::Object>::New(v8::Object::New()); |
| handle1 = v8::Persistent<v8::Object>::New(v8::Object::New()); |
| } |
| - handle2.MakeWeak(NULL, DisposingCallback); |
| - handle3.MakeWeak(NULL, HandleCreatingCallback); |
| + handle2.MakeWeak(isolate, NULL, DisposingCallback); |
| + handle3.MakeWeak(isolate, NULL, HandleCreatingCallback); |
| HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| } |
| @@ -11447,7 +11470,7 @@ THREADED_TEST(NestedHandleScopeAndContexts) { |
| v8::Handle<String> str(value->ToString()); |
| CHECK(!str.IsEmpty()); |
| env->Exit(); |
| - env.Dispose(); |
| + env.Dispose(env->GetIsolate()); |
| } |
| @@ -11769,7 +11792,7 @@ THREADED_TEST(DisposeEnteredContext) { |
| LocalContext outer; |
| { v8::Persistent<v8::Context> inner = v8::Context::New(); |
| inner->Enter(); |
| - inner.Dispose(); |
| + inner.Dispose(inner->GetIsolate()); |
| inner.Clear(); |
| inner->Exit(); |
| } |
| @@ -12476,8 +12499,8 @@ THREADED_TEST(CrossContextNew) { |
| context1->Exit(); |
| // Dispose the contexts to allow them to be garbage collected. |
| - context0.Dispose(); |
| - context1.Dispose(); |
| + context0.Dispose(context0->GetIsolate()); |
| + context1.Dispose(context1->GetIsolate()); |
| } |
| @@ -13292,9 +13315,9 @@ TEST(InlinedFunctionAcrossContexts) { |
| "ReferenceError: G is not defined"); |
| ctx2->Exit(); |
| ctx1->Exit(); |
| - ctx1.Dispose(); |
| + ctx1.Dispose(ctx1->GetIsolate()); |
| } |
| - ctx2.Dispose(); |
| + ctx2.Dispose(ctx2->GetIsolate()); |
| } |
| @@ -13353,9 +13376,9 @@ THREADED_TEST(GetCallingContext) { |
| calling_context2->Exit(); |
| // Dispose the contexts to allow them to be garbage collected. |
| - calling_context0.Dispose(); |
| - calling_context1.Dispose(); |
| - calling_context2.Dispose(); |
| + 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(); |
| @@ -15077,7 +15100,7 @@ TEST(Regress2107) { |
| ctx->Enter(); |
| CreateGarbageInOldSpace(); |
| ctx->Exit(); |
| - ctx.Dispose(); |
| + ctx.Dispose(ctx->GetIsolate()); |
| v8::V8::ContextDisposedNotification(); |
| v8::V8::IdleNotification(kLongIdlePauseInMs); |
| } |
| @@ -15429,7 +15452,7 @@ TEST(Regress528) { |
| CompileRun(source_simple); |
| context->Exit(); |
| } |
| - context.Dispose(); |
| + context.Dispose(context->GetIsolate()); |
| v8::V8::ContextDisposedNotification(); |
| for (gc_count = 1; gc_count < 10; gc_count++) { |
| other_context->Enter(); |
| @@ -15452,7 +15475,7 @@ TEST(Regress528) { |
| CompileRun(source_eval); |
| context->Exit(); |
| } |
| - context.Dispose(); |
| + context.Dispose(context->GetIsolate()); |
| v8::V8::ContextDisposedNotification(); |
| for (gc_count = 1; gc_count < 10; gc_count++) { |
| other_context->Enter(); |
| @@ -15480,7 +15503,7 @@ TEST(Regress528) { |
| CHECK_EQ(1, message->GetLineNumber()); |
| context->Exit(); |
| } |
| - context.Dispose(); |
| + context.Dispose(context->GetIsolate()); |
| v8::V8::ContextDisposedNotification(); |
| for (gc_count = 1; gc_count < 10; gc_count++) { |
| other_context->Enter(); |
| @@ -15492,7 +15515,7 @@ TEST(Regress528) { |
| CHECK_GE(2, gc_count); |
| CHECK_EQ(1, GetGlobalObjectsCount()); |
| - other_context.Dispose(); |
| + other_context.Dispose(other_context->GetIsolate()); |
| v8::V8::ContextDisposedNotification(); |
| } |
| @@ -16282,10 +16305,10 @@ TEST(RunTwoIsolatesOnSingleThread) { |
| { |
| v8::Isolate::Scope iscope(isolate2); |
| - context2.Dispose(); |
| + context2.Dispose(context2->GetIsolate()); |
| } |
| - context1.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| isolate1->Exit(); |
| v8::V8::SetFatalErrorHandler(StoringErrorCallback); |
| @@ -16659,7 +16682,7 @@ class Visitor42 : public v8::PersistentHandleVisitor { |
| CHECK(value->IsObject()); |
| v8::Persistent<v8::Object> visited = |
| v8::Persistent<v8::Object>::Cast(value); |
| - CHECK_EQ(42, visited.WrapperClassId()); |
| + CHECK_EQ(42, visited.WrapperClassId(v8::Isolate::GetCurrent())); |
| CHECK_EQ(object_, visited); |
| ++counter_; |
| } |
| @@ -16673,29 +16696,31 @@ class Visitor42 : public v8::PersistentHandleVisitor { |
| TEST(PersistentHandleVisitor) { |
| v8::HandleScope scope; |
| LocalContext context; |
| + v8::Isolate* isolate = context->GetIsolate(); |
| v8::Persistent<v8::Object> object = |
| v8::Persistent<v8::Object>::New(v8::Object::New()); |
| - CHECK_EQ(0, object.WrapperClassId()); |
| + CHECK_EQ(0, object.WrapperClassId(isolate)); |
| object.SetWrapperClassId(42); |
| - CHECK_EQ(42, object.WrapperClassId()); |
| + CHECK_EQ(42, object.WrapperClassId(isolate)); |
| Visitor42 visitor(object); |
| v8::V8::VisitHandlesWithClassIds(&visitor); |
| CHECK_EQ(1, visitor.counter_); |
| - object.Dispose(); |
| + object.Dispose(isolate); |
| } |
| TEST(WrapperClassId) { |
| v8::HandleScope scope; |
| LocalContext context; |
| + v8::Isolate* isolate = context->GetIsolate(); |
| v8::Persistent<v8::Object> object = |
| v8::Persistent<v8::Object>::New(v8::Object::New()); |
| - CHECK_EQ(0, object.WrapperClassId()); |
| + CHECK_EQ(0, object.WrapperClassId(isolate)); |
| object.SetWrapperClassId(65535); |
| - CHECK_EQ(65535, object.WrapperClassId()); |
| - object.Dispose(); |
| + CHECK_EQ(65535, object.WrapperClassId(isolate)); |
| + object.Dispose(isolate); |
| } |
| @@ -16925,9 +16950,9 @@ THREADED_TEST(CreationContext) { |
| CheckContextId(instance2, 2); |
| } |
| - context1.Dispose(); |
| - context2.Dispose(); |
| - context3.Dispose(); |
| + context1.Dispose(context1->GetIsolate()); |
| + context2.Dispose(context2->GetIsolate()); |
| + context3.Dispose(context3->GetIsolate()); |
| } |
| @@ -16945,7 +16970,7 @@ THREADED_TEST(CreationContextOfJsFunction) { |
| CHECK(function->CreationContext() == context); |
| CheckContextId(function, 1); |
| - context.Dispose(); |
| + context.Dispose(context->GetIsolate()); |
| } |
| @@ -17321,7 +17346,7 @@ THREADED_TEST(Regress93759) { |
| Local<Value> result6 = CompileRun("Object.getPrototypeOf(phidden)"); |
| CHECK(result6->Equals(Undefined())); |
| - context.Dispose(); |
| + context.Dispose(context->GetIsolate()); |
| } |
| @@ -17449,7 +17474,7 @@ THREADED_TEST(ForeignFunctionReceiver) { |
| // Calling with no base. |
| TestReceiver(o, context->Global(), "(1,func)()"); |
| - foreign_context.Dispose(); |
| + foreign_context.Dispose(foreign_context->GetIsolate()); |
| } |