Chromium Code Reviews| Index: test/cctest/test-heap.cc |
| diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc |
| index 9308eb752ed9874adafb0ab5200c263f375ab63c..8249791056bffcacf42e09ca15401032540b748e 100644 |
| --- a/test/cctest/test-heap.cc |
| +++ b/test/cctest/test-heap.cc |
| @@ -58,62 +58,67 @@ TEST(HeapMaps) { |
| } |
| -static void CheckOddball(Object* obj, const char* string) { |
| +static void CheckOddball(Isolate* isolate, Object* obj, const char* string) { |
| CHECK(obj->IsOddball()); |
| bool exc; |
| - Object* print_string = *Execution::ToString(Handle<Object>(obj), &exc); |
| + Object* print_string = |
| + *Execution::ToString(Handle<Object>(obj, isolate), &exc); |
| CHECK(String::cast(print_string)->IsUtf8EqualTo(CStrVector(string))); |
| } |
| -static void CheckSmi(int value, const char* string) { |
| +static void CheckSmi(Isolate* isolate, int value, const char* string) { |
| bool exc; |
| Object* print_string = |
| - *Execution::ToString(Handle<Object>(Smi::FromInt(value)), &exc); |
| + *Execution::ToString(Handle<Object>(Smi::FromInt(value), isolate), &exc); |
| CHECK(String::cast(print_string)->IsUtf8EqualTo(CStrVector(string))); |
| } |
| -static void CheckNumber(double value, const char* string) { |
| +static void CheckNumber(Isolate* isolate, double value, const char* string) { |
| Object* obj = HEAP->NumberFromDouble(value)->ToObjectChecked(); |
| CHECK(obj->IsNumber()); |
| bool exc; |
| - Object* print_string = *Execution::ToString(Handle<Object>(obj), &exc); |
| + Object* print_string = |
| + *Execution::ToString(Handle<Object>(obj, isolate), &exc); |
| CHECK(String::cast(print_string)->IsUtf8EqualTo(CStrVector(string))); |
| } |
| -static void CheckFindCodeObject() { |
| +static void CheckFindCodeObject(Isolate* isolate) { |
| // Test FindCodeObject |
| #define __ assm. |
| - Assembler assm(Isolate::Current(), NULL, 0); |
| + Assembler assm(isolate, NULL, 0); |
| __ nop(); // supported on all architectures |
| CodeDesc desc; |
| assm.GetCode(&desc); |
| - Object* code = HEAP->CreateCode( |
| + Heap* heap = isolate->heap(); |
| + Object* code = heap->CreateCode( |
| desc, |
| Code::ComputeFlags(Code::STUB), |
| - Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
| + Handle<Object>(heap->undefined_value(), |
|
Michael Starzinger
2013/02/25 10:50:58
Just use "isolate->factory()->undefined_value()" h
Sven Panne
2013/02/25 14:44:43
Done.
|
| + isolate))->ToObjectChecked(); |
| CHECK(code->IsCode()); |
| HeapObject* obj = HeapObject::cast(code); |
| Address obj_addr = obj->address(); |
| for (int i = 0; i < obj->Size(); i += kPointerSize) { |
| - Object* found = HEAP->FindCodeObject(obj_addr + i); |
| + Object* found = heap->FindCodeObject(obj_addr + i); |
| CHECK_EQ(code, found); |
| } |
| - Object* copy = HEAP->CreateCode( |
| + Object* copy = heap->CreateCode( |
| desc, |
| Code::ComputeFlags(Code::STUB), |
| - Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
| + Handle<Object>(heap->undefined_value(), |
|
Michael Starzinger
2013/02/25 10:50:58
... and here.
Sven Panne
2013/02/25 14:44:43
Done.
|
| + isolate))->ToObjectChecked(); |
| CHECK(copy->IsCode()); |
| HeapObject* obj_copy = HeapObject::cast(copy); |
| - Object* not_right = HEAP->FindCodeObject(obj_copy->address() + |
| + Object* not_right = heap->FindCodeObject(obj_copy->address() + |
| obj_copy->Size() / 2); |
| CHECK(not_right != code); |
| } |
| @@ -121,50 +126,52 @@ static void CheckFindCodeObject() { |
| TEST(HeapObjects) { |
| InitializeVM(); |
| + Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| v8::HandleScope sc; |
| - Object* value = HEAP->NumberFromDouble(1.000123)->ToObjectChecked(); |
| + Object* value = heap->NumberFromDouble(1.000123)->ToObjectChecked(); |
| CHECK(value->IsHeapNumber()); |
| CHECK(value->IsNumber()); |
| CHECK_EQ(1.000123, value->Number()); |
| - value = HEAP->NumberFromDouble(1.0)->ToObjectChecked(); |
| + value = heap->NumberFromDouble(1.0)->ToObjectChecked(); |
| CHECK(value->IsSmi()); |
| CHECK(value->IsNumber()); |
| CHECK_EQ(1.0, value->Number()); |
| - value = HEAP->NumberFromInt32(1024)->ToObjectChecked(); |
| + value = heap->NumberFromInt32(1024)->ToObjectChecked(); |
| CHECK(value->IsSmi()); |
| CHECK(value->IsNumber()); |
| CHECK_EQ(1024.0, value->Number()); |
| - value = HEAP->NumberFromInt32(Smi::kMinValue)->ToObjectChecked(); |
| + value = heap->NumberFromInt32(Smi::kMinValue)->ToObjectChecked(); |
| CHECK(value->IsSmi()); |
| CHECK(value->IsNumber()); |
| CHECK_EQ(Smi::kMinValue, Smi::cast(value)->value()); |
| - value = HEAP->NumberFromInt32(Smi::kMaxValue)->ToObjectChecked(); |
| + value = heap->NumberFromInt32(Smi::kMaxValue)->ToObjectChecked(); |
| CHECK(value->IsSmi()); |
| CHECK(value->IsNumber()); |
| CHECK_EQ(Smi::kMaxValue, Smi::cast(value)->value()); |
| #ifndef V8_TARGET_ARCH_X64 |
| // TODO(lrn): We need a NumberFromIntptr function in order to test this. |
| - value = HEAP->NumberFromInt32(Smi::kMinValue - 1)->ToObjectChecked(); |
| + value = heap->NumberFromInt32(Smi::kMinValue - 1)->ToObjectChecked(); |
| CHECK(value->IsHeapNumber()); |
| CHECK(value->IsNumber()); |
| CHECK_EQ(static_cast<double>(Smi::kMinValue - 1), value->Number()); |
| #endif |
| MaybeObject* maybe_value = |
| - HEAP->NumberFromUint32(static_cast<uint32_t>(Smi::kMaxValue) + 1); |
| + heap->NumberFromUint32(static_cast<uint32_t>(Smi::kMaxValue) + 1); |
| value = maybe_value->ToObjectChecked(); |
| CHECK(value->IsHeapNumber()); |
| CHECK(value->IsNumber()); |
| CHECK_EQ(static_cast<double>(static_cast<uint32_t>(Smi::kMaxValue) + 1), |
| value->Number()); |
| - maybe_value = HEAP->NumberFromUint32(static_cast<uint32_t>(1) << 31); |
| + maybe_value = heap->NumberFromUint32(static_cast<uint32_t>(1) << 31); |
| value = maybe_value->ToObjectChecked(); |
| CHECK(value->IsHeapNumber()); |
| CHECK(value->IsNumber()); |
| @@ -172,33 +179,33 @@ TEST(HeapObjects) { |
| value->Number()); |
| // nan oddball checks |
| - CHECK(HEAP->nan_value()->IsNumber()); |
| - CHECK(isnan(HEAP->nan_value()->Number())); |
| + CHECK(heap->nan_value()->IsNumber()); |
| + CHECK(isnan(heap->nan_value()->Number())); |
| Handle<String> s = FACTORY->NewStringFromAscii(CStrVector("fisk hest ")); |
| CHECK(s->IsString()); |
| CHECK_EQ(10, s->length()); |
| - String* object_symbol = String::cast(HEAP->Object_symbol()); |
| + String* object_symbol = String::cast(heap->Object_symbol()); |
| CHECK( |
| Isolate::Current()->context()->global_object()->HasLocalProperty( |
| object_symbol)); |
| // Check ToString for oddballs |
| - CheckOddball(HEAP->true_value(), "true"); |
| - CheckOddball(HEAP->false_value(), "false"); |
| - CheckOddball(HEAP->null_value(), "null"); |
| - CheckOddball(HEAP->undefined_value(), "undefined"); |
| + CheckOddball(isolate, heap->true_value(), "true"); |
| + CheckOddball(isolate, heap->false_value(), "false"); |
| + CheckOddball(isolate, heap->null_value(), "null"); |
| + CheckOddball(isolate, heap->undefined_value(), "undefined"); |
| // Check ToString for Smis |
| - CheckSmi(0, "0"); |
| - CheckSmi(42, "42"); |
| - CheckSmi(-42, "-42"); |
| + CheckSmi(isolate, 0, "0"); |
| + CheckSmi(isolate, 42, "42"); |
| + CheckSmi(isolate, -42, "-42"); |
| // Check ToString for Numbers |
| - CheckNumber(1.1, "1.1"); |
| + CheckNumber(isolate, 1.1, "1.1"); |
| - CheckFindCodeObject(); |
| + CheckFindCodeObject(isolate); |
| } |
| @@ -1210,7 +1217,7 @@ TEST(TestCodeFlushingIncrementalAbort) { |
| // is running so that incremental marking aborts and code flushing is |
| // disabled. |
| int position = 0; |
| - Handle<Object> breakpoint_object(Smi::FromInt(0)); |
| + Handle<Object> breakpoint_object(Smi::FromInt(0), isolate); |
| isolate->debug()->SetBreakPoint(function, breakpoint_object, &position); |
| isolate->debug()->ClearAllBreakPoints(); |
| @@ -1357,14 +1364,16 @@ TEST(TestInternalWeakLists) { |
| // Count the number of native contexts in the weak list of native contexts |
| // causing a GC after the specified number of elements. |
| -static int CountNativeContextsWithGC(int n) { |
| +static int CountNativeContextsWithGC(Isolate* isolate, int n) { |
| + Heap* heap = isolate->heap(); |
| int count = 0; |
| - Handle<Object> object(HEAP->native_contexts_list()); |
| + Handle<Object> object(heap->native_contexts_list(), isolate); |
| while (!object->IsUndefined()) { |
| count++; |
| - if (count == n) HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
| + if (count == n) heap->CollectAllGarbage(Heap::kNoGCFlags); |
| object = |
| - Handle<Object>(Context::cast(*object)->get(Context::NEXT_CONTEXT_LINK)); |
| + Handle<Object>(Context::cast(*object)->get(Context::NEXT_CONTEXT_LINK), |
| + isolate); |
| } |
| return count; |
| } |
| @@ -1377,13 +1386,16 @@ static int CountOptimizedUserFunctionsWithGC(v8::Handle<v8::Context> context, |
| int n) { |
| int count = 0; |
| Handle<Context> icontext = v8::Utils::OpenHandle(*context); |
| - Handle<Object> object(icontext->get(Context::OPTIMIZED_FUNCTIONS_LIST)); |
| + Isolate* isolate = icontext->GetIsolate(); |
| + Handle<Object> object(icontext->get(Context::OPTIMIZED_FUNCTIONS_LIST), |
| + isolate); |
| while (object->IsJSFunction() && |
| !Handle<JSFunction>::cast(object)->IsBuiltin()) { |
| count++; |
| - if (count == n) HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
| + if (count == n) isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags); |
| object = Handle<Object>( |
| - Object::cast(JSFunction::cast(*object)->next_function_link())); |
| + Object::cast(JSFunction::cast(*object)->next_function_link()), |
| + isolate); |
| } |
| return count; |
| } |
| @@ -1391,6 +1403,7 @@ static int CountOptimizedUserFunctionsWithGC(v8::Handle<v8::Context> context, |
| TEST(TestInternalWeakListsTraverseWithGC) { |
| v8::V8::Initialize(); |
| + Isolate* isolate = Isolate::Current(); |
| static const int kNumTestContexts = 10; |
| @@ -1404,7 +1417,7 @@ TEST(TestInternalWeakListsTraverseWithGC) { |
| for (int i = 0; i < kNumTestContexts; i++) { |
| ctx[i] = v8::Context::New(); |
| CHECK_EQ(i + 1, CountNativeContexts()); |
| - CHECK_EQ(i + 1, CountNativeContextsWithGC(i / 2 + 1)); |
| + CHECK_EQ(i + 1, CountNativeContextsWithGC(isolate, i / 2 + 1)); |
| } |
| bool opt = (FLAG_always_opt && i::V8::UseCrankshaft()); |
| @@ -2487,6 +2500,7 @@ TEST(ReleaseStackTraceData) { |
| TEST(Regression144230) { |
| InitializeVM(); |
| Isolate* isolate = Isolate::Current(); |
| + Heap* heap = isolate->heap(); |
| v8::HandleScope scope; |
| // First make sure that the uninitialized CallIC stub is on a single page |
| @@ -2494,7 +2508,7 @@ TEST(Regression144230) { |
| { |
| v8::HandleScope inner_scope; |
| AlwaysAllocateScope always_allocate; |
| - SimulateFullSpace(HEAP->code_space()); |
| + SimulateFullSpace(heap->code_space()); |
| isolate->stub_cache()->ComputeCallInitialize(9, RelocInfo::CODE_TARGET); |
| } |
| @@ -2503,7 +2517,7 @@ TEST(Regression144230) { |
| { |
| v8::HandleScope inner_scope; |
| AlwaysAllocateScope always_allocate; |
| - SimulateFullSpace(HEAP->code_space()); |
| + SimulateFullSpace(heap->code_space()); |
| CompileRun("var o = { f:function(a,b,c,d,e,f,g,h,i) {}};" |
| "function call() { o.f(1,2,3,4,5,6,7,8,9); };" |
| "call();"); |
| @@ -2519,7 +2533,7 @@ TEST(Regression144230) { |
| " 'f' + i + '();');" |
| "}"); |
| } |
| - HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
| + heap->CollectAllGarbage(Heap::kNoGCFlags); |
| // Fourth is the tricky part. Make sure the code containing the CallIC is |
| // visited first without clearing the IC. The shared function info is then |
| @@ -2530,12 +2544,12 @@ TEST(Regression144230) { |
| JSFunction* call = JSFunction::cast(maybe_call->ToObjectChecked()); |
| USE(global->SetProperty(*name, Smi::FromInt(0), NONE, kNonStrictMode)); |
| isolate->compilation_cache()->Clear(); |
| - call->shared()->set_ic_age(HEAP->global_ic_age() + 1); |
| - Handle<Object> call_code(call->code()); |
| - Handle<Object> call_function(call); |
| + call->shared()->set_ic_age(heap->global_ic_age() + 1); |
| + Handle<Object> call_code(call->code(), isolate); |
| + Handle<Object> call_function(call, isolate); |
| // Now we are ready to mess up the heap. |
| - HEAP->CollectAllGarbage(Heap::kReduceMemoryFootprintMask); |
| + heap->CollectAllGarbage(Heap::kReduceMemoryFootprintMask); |
| // Either heap verification caught the problem already or we go kaboom once |
| // the CallIC is executed the next time. |