Index: test/cctest/test-global-handles.cc |
diff --git a/test/cctest/test-global-handles.cc b/test/cctest/test-global-handles.cc |
index 07b4b4c39a6d1a639321c637dff37f2047034943..ec8f769fb5a5e9c706bf4ae0dddc04423105bcad 100644 |
--- a/test/cctest/test-global-handles.cc |
+++ b/test/cctest/test-global-handles.cc |
@@ -475,24 +475,25 @@ TEST(EternalHandles) { |
CcTest::InitializeVM(); |
Isolate* isolate = Isolate::Current(); |
v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); |
- EternalHandles* eternals = isolate->eternal_handles(); |
+ EternalHandles* eternal_handles = isolate->eternal_handles(); |
// Create a number of handles that will not be on a block boundary |
const int kArrayLength = 2048-1; |
int indices[kArrayLength]; |
+ v8::Eternal<v8::Value> eternals[kArrayLength]; |
- CHECK_EQ(0, eternals->NumberOfHandles()); |
+ CHECK_EQ(0, eternal_handles->NumberOfHandles()); |
for (int i = 0; i < kArrayLength; i++) { |
HandleScope scope(isolate); |
v8::Local<v8::Object> object = v8::Object::New(); |
object->Set(i, v8::Integer::New(i, v8_isolate)); |
- if (i % 2 == 0) { |
- // Create with internal api |
- indices[i] = eternals->Create(isolate, *v8::Utils::OpenHandle(*object)); |
- } else { |
- // Create with external api |
- indices[i] = object.Eternalize(v8_isolate); |
- } |
+ // Create with internal api |
+ eternal_handles->Create( |
+ isolate, *v8::Utils::OpenHandle(*object), &indices[i]); |
+ // Create with external api |
+ CHECK(!eternals[i].IsSet()); |
+ eternals[i].Set(v8_isolate, object); |
+ CHECK(eternals[i].IsSet()); |
} |
isolate->heap()->CollectAllAvailableGarbage(); |
@@ -500,22 +501,32 @@ TEST(EternalHandles) { |
for (int i = 0; i < kArrayLength; i++) { |
for (int j = 0; j < 2; j++) { |
HandleScope scope(isolate); |
- v8::Local<v8::Object> object; |
+ v8::Local<v8::Value> local; |
if (j == 0) { |
// Test internal api |
- v8::Local<v8::Value> local = |
- v8::Utils::ToLocal(eternals->Get(indices[i])); |
- object = v8::Handle<v8::Object>::Cast(local); |
+ local = v8::Utils::ToLocal(eternal_handles->Get(indices[i])); |
} else { |
// Test external api |
- object = v8::Local<v8::Object>::GetEternal(v8_isolate, indices[i]); |
+ local = eternals[i].Get(v8_isolate); |
} |
+ v8::Local<v8::Object> object = v8::Handle<v8::Object>::Cast(local); |
v8::Local<v8::Value> value = object->Get(i); |
CHECK(value->IsInt32()); |
CHECK_EQ(i, value->Int32Value()); |
} |
} |
- CHECK_EQ(kArrayLength, eternals->NumberOfHandles()); |
+ CHECK_EQ(2*kArrayLength, eternal_handles->NumberOfHandles()); |
+ |
+ // Create an eternal with via the constructor |
rossberg
2013/08/12 15:13:13
Nit: typo?
dcarney
2013/08/13 06:46:24
fixed
|
+ { |
+ HandleScope scope(isolate); |
+ v8::Local<v8::Object> object = v8::Object::New(); |
+ v8::Eternal<v8::Object> eternal(v8_isolate, object); |
+ CHECK(eternal.IsSet()); |
+ CHECK(object == eternal.Get(v8_isolate)); |
+ } |
+ |
+ CHECK_EQ(2*kArrayLength + 1, eternal_handles->NumberOfHandles()); |
} |