Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: test/cctest/test-heap.cc

Issue 23534067: bulk replace Isolate::Current in tests (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/cctest/test-hashing.cc ('k') | test/cctest/test-heap-profiler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 CHECK(copy->IsCode()); 141 CHECK(copy->IsCode());
142 HeapObject* obj_copy = HeapObject::cast(copy); 142 HeapObject* obj_copy = HeapObject::cast(copy);
143 Object* not_right = isolate->FindCodeObject(obj_copy->address() + 143 Object* not_right = isolate->FindCodeObject(obj_copy->address() +
144 obj_copy->Size() / 2); 144 obj_copy->Size() / 2);
145 CHECK(not_right != code); 145 CHECK(not_right != code);
146 } 146 }
147 147
148 148
149 TEST(HeapObjects) { 149 TEST(HeapObjects) {
150 CcTest::InitializeVM(); 150 CcTest::InitializeVM();
151 Isolate* isolate = Isolate::Current(); 151 Isolate* isolate = CcTest::i_isolate();
152 Factory* factory = isolate->factory(); 152 Factory* factory = isolate->factory();
153 Heap* heap = isolate->heap(); 153 Heap* heap = isolate->heap();
154 154
155 HandleScope sc(isolate); 155 HandleScope sc(isolate);
156 Object* value = heap->NumberFromDouble(1.000123)->ToObjectChecked(); 156 Object* value = heap->NumberFromDouble(1.000123)->ToObjectChecked();
157 CHECK(value->IsHeapNumber()); 157 CHECK(value->IsHeapNumber());
158 CHECK(value->IsNumber()); 158 CHECK(value->IsNumber());
159 CHECK_EQ(1.000123, value->Number()); 159 CHECK_EQ(1.000123, value->Number());
160 160
161 value = heap->NumberFromDouble(1.0)->ToObjectChecked(); 161 value = heap->NumberFromDouble(1.0)->ToObjectChecked();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 203
204 // nan oddball checks 204 // nan oddball checks
205 CHECK(heap->nan_value()->IsNumber()); 205 CHECK(heap->nan_value()->IsNumber());
206 CHECK(std::isnan(heap->nan_value()->Number())); 206 CHECK(std::isnan(heap->nan_value()->Number()));
207 207
208 Handle<String> s = factory->NewStringFromAscii(CStrVector("fisk hest ")); 208 Handle<String> s = factory->NewStringFromAscii(CStrVector("fisk hest "));
209 CHECK(s->IsString()); 209 CHECK(s->IsString());
210 CHECK_EQ(10, s->length()); 210 CHECK_EQ(10, s->length());
211 211
212 Handle<String> object_string = Handle<String>::cast(factory->Object_string()); 212 Handle<String> object_string = Handle<String>::cast(factory->Object_string());
213 Handle<GlobalObject> global(Isolate::Current()->context()->global_object()); 213 Handle<GlobalObject> global(CcTest::i_isolate()->context()->global_object());
214 CHECK(JSReceiver::HasLocalProperty(global, object_string)); 214 CHECK(JSReceiver::HasLocalProperty(global, object_string));
215 215
216 // Check ToString for oddballs 216 // Check ToString for oddballs
217 CheckOddball(isolate, heap->true_value(), "true"); 217 CheckOddball(isolate, heap->true_value(), "true");
218 CheckOddball(isolate, heap->false_value(), "false"); 218 CheckOddball(isolate, heap->false_value(), "false");
219 CheckOddball(isolate, heap->null_value(), "null"); 219 CheckOddball(isolate, heap->null_value(), "null");
220 CheckOddball(isolate, heap->undefined_value(), "undefined"); 220 CheckOddball(isolate, heap->undefined_value(), "undefined");
221 221
222 // Check ToString for Smis 222 // Check ToString for Smis
223 CheckSmi(isolate, 0, "0"); 223 CheckSmi(isolate, 0, "0");
(...skipping 18 matching lines...) Expand all
242 CHECK_EQ(OLD_POINTER_SPACE, 242 CHECK_EQ(OLD_POINTER_SPACE,
243 Failure::RetryAfterGC(OLD_POINTER_SPACE)->allocation_space()); 243 Failure::RetryAfterGC(OLD_POINTER_SPACE)->allocation_space());
244 CHECK(Failure::Exception()->IsFailure()); 244 CHECK(Failure::Exception()->IsFailure());
245 CHECK(Smi::FromInt(Smi::kMinValue)->IsSmi()); 245 CHECK(Smi::FromInt(Smi::kMinValue)->IsSmi());
246 CHECK(Smi::FromInt(Smi::kMaxValue)->IsSmi()); 246 CHECK(Smi::FromInt(Smi::kMaxValue)->IsSmi());
247 } 247 }
248 248
249 249
250 TEST(GarbageCollection) { 250 TEST(GarbageCollection) {
251 CcTest::InitializeVM(); 251 CcTest::InitializeVM();
252 Isolate* isolate = Isolate::Current(); 252 Isolate* isolate = CcTest::i_isolate();
253 Heap* heap = isolate->heap(); 253 Heap* heap = isolate->heap();
254 Factory* factory = isolate->factory(); 254 Factory* factory = isolate->factory();
255 255
256 HandleScope sc(isolate); 256 HandleScope sc(isolate);
257 // Check GC. 257 // Check GC.
258 heap->CollectGarbage(NEW_SPACE); 258 heap->CollectGarbage(NEW_SPACE);
259 259
260 Handle<GlobalObject> global(Isolate::Current()->context()->global_object()); 260 Handle<GlobalObject> global(CcTest::i_isolate()->context()->global_object());
261 Handle<String> name = factory->InternalizeUtf8String("theFunction"); 261 Handle<String> name = factory->InternalizeUtf8String("theFunction");
262 Handle<String> prop_name = factory->InternalizeUtf8String("theSlot"); 262 Handle<String> prop_name = factory->InternalizeUtf8String("theSlot");
263 Handle<String> prop_namex = factory->InternalizeUtf8String("theSlotx"); 263 Handle<String> prop_namex = factory->InternalizeUtf8String("theSlotx");
264 Handle<String> obj_name = factory->InternalizeUtf8String("theObject"); 264 Handle<String> obj_name = factory->InternalizeUtf8String("theObject");
265 Handle<Smi> twenty_three(Smi::FromInt(23), isolate); 265 Handle<Smi> twenty_three(Smi::FromInt(23), isolate);
266 Handle<Smi> twenty_four(Smi::FromInt(24), isolate); 266 Handle<Smi> twenty_four(Smi::FromInt(24), isolate);
267 267
268 { 268 {
269 HandleScope inner_scope(isolate); 269 HandleScope inner_scope(isolate);
270 // Allocate a function and keep it in global object's property. 270 // Allocate a function and keep it in global object's property.
(...skipping 10 matching lines...) Expand all
281 281
282 CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name)); 282 CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
283 CHECK_EQ(Smi::FromInt(24), obj->GetProperty(*prop_namex)); 283 CHECK_EQ(Smi::FromInt(24), obj->GetProperty(*prop_namex));
284 } 284 }
285 285
286 heap->CollectGarbage(NEW_SPACE); 286 heap->CollectGarbage(NEW_SPACE);
287 287
288 // Function should be alive. 288 // Function should be alive.
289 CHECK(JSReceiver::HasLocalProperty(global, name)); 289 CHECK(JSReceiver::HasLocalProperty(global, name));
290 // Check function is retained. 290 // Check function is retained.
291 Object* func_value = Isolate::Current()->context()->global_object()-> 291 Object* func_value = CcTest::i_isolate()->context()->global_object()->
292 GetProperty(*name)->ToObjectChecked(); 292 GetProperty(*name)->ToObjectChecked();
293 CHECK(func_value->IsJSFunction()); 293 CHECK(func_value->IsJSFunction());
294 Handle<JSFunction> function(JSFunction::cast(func_value)); 294 Handle<JSFunction> function(JSFunction::cast(func_value));
295 295
296 { 296 {
297 HandleScope inner_scope(isolate); 297 HandleScope inner_scope(isolate);
298 // Allocate another object, make it reachable from global. 298 // Allocate another object, make it reachable from global.
299 Handle<JSObject> obj = factory->NewJSObject(function); 299 Handle<JSObject> obj = factory->NewJSObject(function);
300 JSReceiver::SetProperty(global, obj_name, obj, NONE, kNonStrictMode); 300 JSReceiver::SetProperty(global, obj_name, obj, NONE, kNonStrictMode);
301 JSReceiver::SetProperty(obj, prop_name, twenty_three, NONE, kNonStrictMode); 301 JSReceiver::SetProperty(obj, prop_name, twenty_three, NONE, kNonStrictMode);
302 } 302 }
303 303
304 // After gc, it should survive. 304 // After gc, it should survive.
305 heap->CollectGarbage(NEW_SPACE); 305 heap->CollectGarbage(NEW_SPACE);
306 306
307 CHECK(JSReceiver::HasLocalProperty(global, obj_name)); 307 CHECK(JSReceiver::HasLocalProperty(global, obj_name));
308 CHECK(Isolate::Current()->context()->global_object()-> 308 CHECK(CcTest::i_isolate()->context()->global_object()->
309 GetProperty(*obj_name)->ToObjectChecked()->IsJSObject()); 309 GetProperty(*obj_name)->ToObjectChecked()->IsJSObject());
310 Object* obj = Isolate::Current()->context()->global_object()-> 310 Object* obj = CcTest::i_isolate()->context()->global_object()->
311 GetProperty(*obj_name)->ToObjectChecked(); 311 GetProperty(*obj_name)->ToObjectChecked();
312 JSObject* js_obj = JSObject::cast(obj); 312 JSObject* js_obj = JSObject::cast(obj);
313 CHECK_EQ(Smi::FromInt(23), js_obj->GetProperty(*prop_name)); 313 CHECK_EQ(Smi::FromInt(23), js_obj->GetProperty(*prop_name));
314 } 314 }
315 315
316 316
317 static void VerifyStringAllocation(Isolate* isolate, const char* string) { 317 static void VerifyStringAllocation(Isolate* isolate, const char* string) {
318 HandleScope scope(isolate); 318 HandleScope scope(isolate);
319 Handle<String> s = isolate->factory()->NewStringFromUtf8(CStrVector(string)); 319 Handle<String> s = isolate->factory()->NewStringFromUtf8(CStrVector(string));
320 CHECK_EQ(StrLength(string), s->length()); 320 CHECK_EQ(StrLength(string), s->length());
(...skipping 10 matching lines...) Expand all
331 VerifyStringAllocation(isolate, "a"); 331 VerifyStringAllocation(isolate, "a");
332 VerifyStringAllocation(isolate, "ab"); 332 VerifyStringAllocation(isolate, "ab");
333 VerifyStringAllocation(isolate, "abc"); 333 VerifyStringAllocation(isolate, "abc");
334 VerifyStringAllocation(isolate, "abcd"); 334 VerifyStringAllocation(isolate, "abcd");
335 VerifyStringAllocation(isolate, "fiskerdrengen er paa havet"); 335 VerifyStringAllocation(isolate, "fiskerdrengen er paa havet");
336 } 336 }
337 337
338 338
339 TEST(LocalHandles) { 339 TEST(LocalHandles) {
340 CcTest::InitializeVM(); 340 CcTest::InitializeVM();
341 Isolate* isolate = Isolate::Current(); 341 Isolate* isolate = CcTest::i_isolate();
342 Factory* factory = isolate->factory(); 342 Factory* factory = isolate->factory();
343 343
344 v8::HandleScope scope(CcTest::isolate()); 344 v8::HandleScope scope(CcTest::isolate());
345 const char* name = "Kasper the spunky"; 345 const char* name = "Kasper the spunky";
346 Handle<String> string = factory->NewStringFromAscii(CStrVector(name)); 346 Handle<String> string = factory->NewStringFromAscii(CStrVector(name));
347 CHECK_EQ(StrLength(name), string->length()); 347 CHECK_EQ(StrLength(name), string->length());
348 } 348 }
349 349
350 350
351 TEST(GlobalHandles) { 351 TEST(GlobalHandles) {
352 CcTest::InitializeVM(); 352 CcTest::InitializeVM();
353 Isolate* isolate = Isolate::Current(); 353 Isolate* isolate = CcTest::i_isolate();
354 Heap* heap = isolate->heap(); 354 Heap* heap = isolate->heap();
355 Factory* factory = isolate->factory(); 355 Factory* factory = isolate->factory();
356 GlobalHandles* global_handles = isolate->global_handles(); 356 GlobalHandles* global_handles = isolate->global_handles();
357 357
358 Handle<Object> h1; 358 Handle<Object> h1;
359 Handle<Object> h2; 359 Handle<Object> h2;
360 Handle<Object> h3; 360 Handle<Object> h3;
361 Handle<Object> h4; 361 Handle<Object> h4;
362 362
363 { 363 {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 v8::Persistent<v8::Value>* handle, 396 v8::Persistent<v8::Value>* handle,
397 void* id) { 397 void* id) {
398 if (1234 == reinterpret_cast<intptr_t>(id)) WeakPointerCleared = true; 398 if (1234 == reinterpret_cast<intptr_t>(id)) WeakPointerCleared = true;
399 handle->Dispose(); 399 handle->Dispose();
400 } 400 }
401 401
402 402
403 TEST(WeakGlobalHandlesScavenge) { 403 TEST(WeakGlobalHandlesScavenge) {
404 i::FLAG_stress_compaction = false; 404 i::FLAG_stress_compaction = false;
405 CcTest::InitializeVM(); 405 CcTest::InitializeVM();
406 Isolate* isolate = Isolate::Current(); 406 Isolate* isolate = CcTest::i_isolate();
407 Heap* heap = isolate->heap(); 407 Heap* heap = isolate->heap();
408 Factory* factory = isolate->factory(); 408 Factory* factory = isolate->factory();
409 GlobalHandles* global_handles = isolate->global_handles(); 409 GlobalHandles* global_handles = isolate->global_handles();
410 410
411 WeakPointerCleared = false; 411 WeakPointerCleared = false;
412 412
413 Handle<Object> h1; 413 Handle<Object> h1;
414 Handle<Object> h2; 414 Handle<Object> h2;
415 415
416 { 416 {
(...skipping 20 matching lines...) Expand all
437 CHECK(!global_handles->IsNearDeath(h2.location())); 437 CHECK(!global_handles->IsNearDeath(h2.location()));
438 CHECK(!global_handles->IsNearDeath(h1.location())); 438 CHECK(!global_handles->IsNearDeath(h1.location()));
439 439
440 global_handles->Destroy(h1.location()); 440 global_handles->Destroy(h1.location());
441 global_handles->Destroy(h2.location()); 441 global_handles->Destroy(h2.location());
442 } 442 }
443 443
444 444
445 TEST(WeakGlobalHandlesMark) { 445 TEST(WeakGlobalHandlesMark) {
446 CcTest::InitializeVM(); 446 CcTest::InitializeVM();
447 Isolate* isolate = Isolate::Current(); 447 Isolate* isolate = CcTest::i_isolate();
448 Heap* heap = isolate->heap(); 448 Heap* heap = isolate->heap();
449 Factory* factory = isolate->factory(); 449 Factory* factory = isolate->factory();
450 GlobalHandles* global_handles = isolate->global_handles(); 450 GlobalHandles* global_handles = isolate->global_handles();
451 451
452 WeakPointerCleared = false; 452 WeakPointerCleared = false;
453 453
454 Handle<Object> h1; 454 Handle<Object> h1;
455 Handle<Object> h2; 455 Handle<Object> h2;
456 456
457 { 457 {
(...skipping 25 matching lines...) Expand all
483 CHECK(WeakPointerCleared); 483 CHECK(WeakPointerCleared);
484 CHECK(!GlobalHandles::IsNearDeath(h1.location())); 484 CHECK(!GlobalHandles::IsNearDeath(h1.location()));
485 485
486 global_handles->Destroy(h1.location()); 486 global_handles->Destroy(h1.location());
487 } 487 }
488 488
489 489
490 TEST(DeleteWeakGlobalHandle) { 490 TEST(DeleteWeakGlobalHandle) {
491 i::FLAG_stress_compaction = false; 491 i::FLAG_stress_compaction = false;
492 CcTest::InitializeVM(); 492 CcTest::InitializeVM();
493 Isolate* isolate = Isolate::Current(); 493 Isolate* isolate = CcTest::i_isolate();
494 Heap* heap = isolate->heap(); 494 Heap* heap = isolate->heap();
495 Factory* factory = isolate->factory(); 495 Factory* factory = isolate->factory();
496 GlobalHandles* global_handles = isolate->global_handles(); 496 GlobalHandles* global_handles = isolate->global_handles();
497 497
498 WeakPointerCleared = false; 498 WeakPointerCleared = false;
499 499
500 Handle<Object> h; 500 Handle<Object> h;
501 501
502 { 502 {
503 HandleScope scope(isolate); 503 HandleScope scope(isolate);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 TEST(StringTable) { 605 TEST(StringTable) {
606 CcTest::InitializeVM(); 606 CcTest::InitializeVM();
607 607
608 CheckInternalizedStrings(not_so_random_string_table); 608 CheckInternalizedStrings(not_so_random_string_table);
609 CheckInternalizedStrings(not_so_random_string_table); 609 CheckInternalizedStrings(not_so_random_string_table);
610 } 610 }
611 611
612 612
613 TEST(FunctionAllocation) { 613 TEST(FunctionAllocation) {
614 CcTest::InitializeVM(); 614 CcTest::InitializeVM();
615 Isolate* isolate = Isolate::Current(); 615 Isolate* isolate = CcTest::i_isolate();
616 Factory* factory = isolate->factory(); 616 Factory* factory = isolate->factory();
617 617
618 v8::HandleScope sc(CcTest::isolate()); 618 v8::HandleScope sc(CcTest::isolate());
619 Handle<String> name = factory->InternalizeUtf8String("theFunction"); 619 Handle<String> name = factory->InternalizeUtf8String("theFunction");
620 Handle<JSFunction> function = 620 Handle<JSFunction> function =
621 factory->NewFunction(name, factory->undefined_value()); 621 factory->NewFunction(name, factory->undefined_value());
622 Handle<Map> initial_map = 622 Handle<Map> initial_map =
623 factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 623 factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
624 function->set_initial_map(*initial_map); 624 function->set_initial_map(*initial_map);
625 625
626 Handle<Smi> twenty_three(Smi::FromInt(23), isolate); 626 Handle<Smi> twenty_three(Smi::FromInt(23), isolate);
627 Handle<Smi> twenty_four(Smi::FromInt(24), isolate); 627 Handle<Smi> twenty_four(Smi::FromInt(24), isolate);
628 628
629 Handle<String> prop_name = factory->InternalizeUtf8String("theSlot"); 629 Handle<String> prop_name = factory->InternalizeUtf8String("theSlot");
630 Handle<JSObject> obj = factory->NewJSObject(function); 630 Handle<JSObject> obj = factory->NewJSObject(function);
631 JSReceiver::SetProperty(obj, prop_name, twenty_three, NONE, kNonStrictMode); 631 JSReceiver::SetProperty(obj, prop_name, twenty_three, NONE, kNonStrictMode);
632 CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name)); 632 CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
633 // Check that we can add properties to function objects. 633 // Check that we can add properties to function objects.
634 JSReceiver::SetProperty(function, prop_name, twenty_four, NONE, 634 JSReceiver::SetProperty(function, prop_name, twenty_four, NONE,
635 kNonStrictMode); 635 kNonStrictMode);
636 CHECK_EQ(Smi::FromInt(24), function->GetProperty(*prop_name)); 636 CHECK_EQ(Smi::FromInt(24), function->GetProperty(*prop_name));
637 } 637 }
638 638
639 639
640 TEST(ObjectProperties) { 640 TEST(ObjectProperties) {
641 CcTest::InitializeVM(); 641 CcTest::InitializeVM();
642 Isolate* isolate = Isolate::Current(); 642 Isolate* isolate = CcTest::i_isolate();
643 Factory* factory = isolate->factory(); 643 Factory* factory = isolate->factory();
644 644
645 v8::HandleScope sc(CcTest::isolate()); 645 v8::HandleScope sc(CcTest::isolate());
646 String* object_string = String::cast(HEAP->Object_string()); 646 String* object_string = String::cast(HEAP->Object_string());
647 Object* raw_object = Isolate::Current()->context()->global_object()-> 647 Object* raw_object = CcTest::i_isolate()->context()->global_object()->
648 GetProperty(object_string)->ToObjectChecked(); 648 GetProperty(object_string)->ToObjectChecked();
649 JSFunction* object_function = JSFunction::cast(raw_object); 649 JSFunction* object_function = JSFunction::cast(raw_object);
650 Handle<JSFunction> constructor(object_function); 650 Handle<JSFunction> constructor(object_function);
651 Handle<JSObject> obj = factory->NewJSObject(constructor); 651 Handle<JSObject> obj = factory->NewJSObject(constructor);
652 Handle<String> first = factory->InternalizeUtf8String("first"); 652 Handle<String> first = factory->InternalizeUtf8String("first");
653 Handle<String> second = factory->InternalizeUtf8String("second"); 653 Handle<String> second = factory->InternalizeUtf8String("second");
654 654
655 Handle<Smi> one(Smi::FromInt(1), isolate); 655 Handle<Smi> one(Smi::FromInt(1), isolate);
656 Handle<Smi> two(Smi::FromInt(2), isolate); 656 Handle<Smi> two(Smi::FromInt(2), isolate);
657 657
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 const char* string2 = "fugl"; 703 const char* string2 = "fugl";
704 Handle<String> s2_string = factory->InternalizeUtf8String(string2); 704 Handle<String> s2_string = factory->InternalizeUtf8String(string2);
705 JSReceiver::SetProperty(obj, s2_string, one, NONE, kNonStrictMode); 705 JSReceiver::SetProperty(obj, s2_string, one, NONE, kNonStrictMode);
706 Handle<String> s2 = factory->NewStringFromAscii(CStrVector(string2)); 706 Handle<String> s2 = factory->NewStringFromAscii(CStrVector(string2));
707 CHECK(JSReceiver::HasLocalProperty(obj, s2)); 707 CHECK(JSReceiver::HasLocalProperty(obj, s2));
708 } 708 }
709 709
710 710
711 TEST(JSObjectMaps) { 711 TEST(JSObjectMaps) {
712 CcTest::InitializeVM(); 712 CcTest::InitializeVM();
713 Isolate* isolate = Isolate::Current(); 713 Isolate* isolate = CcTest::i_isolate();
714 Factory* factory = isolate->factory(); 714 Factory* factory = isolate->factory();
715 715
716 v8::HandleScope sc(CcTest::isolate()); 716 v8::HandleScope sc(CcTest::isolate());
717 Handle<String> name = factory->InternalizeUtf8String("theFunction"); 717 Handle<String> name = factory->InternalizeUtf8String("theFunction");
718 Handle<JSFunction> function = 718 Handle<JSFunction> function =
719 factory->NewFunction(name, factory->undefined_value()); 719 factory->NewFunction(name, factory->undefined_value());
720 Handle<Map> initial_map = 720 Handle<Map> initial_map =
721 factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 721 factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
722 function->set_initial_map(*initial_map); 722 function->set_initial_map(*initial_map);
723 723
724 Handle<String> prop_name = factory->InternalizeUtf8String("theSlot"); 724 Handle<String> prop_name = factory->InternalizeUtf8String("theSlot");
725 Handle<JSObject> obj = factory->NewJSObject(function); 725 Handle<JSObject> obj = factory->NewJSObject(function);
726 726
727 // Set a propery 727 // Set a propery
728 Handle<Smi> twenty_three(Smi::FromInt(23), isolate); 728 Handle<Smi> twenty_three(Smi::FromInt(23), isolate);
729 JSReceiver::SetProperty(obj, prop_name, twenty_three, NONE, kNonStrictMode); 729 JSReceiver::SetProperty(obj, prop_name, twenty_three, NONE, kNonStrictMode);
730 CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name)); 730 CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
731 731
732 // Check the map has changed 732 // Check the map has changed
733 CHECK(*initial_map != obj->map()); 733 CHECK(*initial_map != obj->map());
734 } 734 }
735 735
736 736
737 TEST(JSArray) { 737 TEST(JSArray) {
738 CcTest::InitializeVM(); 738 CcTest::InitializeVM();
739 Isolate* isolate = Isolate::Current(); 739 Isolate* isolate = CcTest::i_isolate();
740 Factory* factory = isolate->factory(); 740 Factory* factory = isolate->factory();
741 741
742 v8::HandleScope sc(CcTest::isolate()); 742 v8::HandleScope sc(CcTest::isolate());
743 Handle<String> name = factory->InternalizeUtf8String("Array"); 743 Handle<String> name = factory->InternalizeUtf8String("Array");
744 Object* raw_object = Isolate::Current()->context()->global_object()-> 744 Object* raw_object = CcTest::i_isolate()->context()->global_object()->
745 GetProperty(*name)->ToObjectChecked(); 745 GetProperty(*name)->ToObjectChecked();
746 Handle<JSFunction> function = Handle<JSFunction>( 746 Handle<JSFunction> function = Handle<JSFunction>(
747 JSFunction::cast(raw_object)); 747 JSFunction::cast(raw_object));
748 748
749 // Allocate the object. 749 // Allocate the object.
750 Handle<JSObject> object = factory->NewJSObject(function); 750 Handle<JSObject> object = factory->NewJSObject(function);
751 Handle<JSArray> array = Handle<JSArray>::cast(object); 751 Handle<JSArray> array = Handle<JSArray>::cast(object);
752 // We just initialized the VM, no heap allocation failure yet. 752 // We just initialized the VM, no heap allocation failure yet.
753 array->Initialize(0)->ToObjectChecked(); 753 array->Initialize(0)->ToObjectChecked();
754 754
(...skipping 23 matching lines...) Expand all
778 uint32_t new_int_length = 0; 778 uint32_t new_int_length = 0;
779 CHECK(array->length()->ToArrayIndex(&new_int_length)); 779 CHECK(array->length()->ToArrayIndex(&new_int_length));
780 CHECK_EQ(static_cast<double>(int_length), new_int_length - 1); 780 CHECK_EQ(static_cast<double>(int_length), new_int_length - 1);
781 CHECK_EQ(array->GetElement(isolate, int_length), *name); 781 CHECK_EQ(array->GetElement(isolate, int_length), *name);
782 CHECK_EQ(array->GetElement(isolate, 0), *name); 782 CHECK_EQ(array->GetElement(isolate, 0), *name);
783 } 783 }
784 784
785 785
786 TEST(JSObjectCopy) { 786 TEST(JSObjectCopy) {
787 CcTest::InitializeVM(); 787 CcTest::InitializeVM();
788 Isolate* isolate = Isolate::Current(); 788 Isolate* isolate = CcTest::i_isolate();
789 Factory* factory = isolate->factory(); 789 Factory* factory = isolate->factory();
790 790
791 v8::HandleScope sc(CcTest::isolate()); 791 v8::HandleScope sc(CcTest::isolate());
792 String* object_string = String::cast(HEAP->Object_string()); 792 String* object_string = String::cast(HEAP->Object_string());
793 Object* raw_object = Isolate::Current()->context()->global_object()-> 793 Object* raw_object = CcTest::i_isolate()->context()->global_object()->
794 GetProperty(object_string)->ToObjectChecked(); 794 GetProperty(object_string)->ToObjectChecked();
795 JSFunction* object_function = JSFunction::cast(raw_object); 795 JSFunction* object_function = JSFunction::cast(raw_object);
796 Handle<JSFunction> constructor(object_function); 796 Handle<JSFunction> constructor(object_function);
797 Handle<JSObject> obj = factory->NewJSObject(constructor); 797 Handle<JSObject> obj = factory->NewJSObject(constructor);
798 Handle<String> first = factory->InternalizeUtf8String("first"); 798 Handle<String> first = factory->InternalizeUtf8String("first");
799 Handle<String> second = factory->InternalizeUtf8String("second"); 799 Handle<String> second = factory->InternalizeUtf8String("second");
800 800
801 Handle<Smi> one(Smi::FromInt(1), isolate); 801 Handle<Smi> one(Smi::FromInt(1), isolate);
802 Handle<Smi> two(Smi::FromInt(2), isolate); 802 Handle<Smi> two(Smi::FromInt(2), isolate);
803 803
(...skipping 23 matching lines...) Expand all
827 CHECK_EQ(obj->GetElement(isolate, 1), clone->GetElement(isolate, 0)); 827 CHECK_EQ(obj->GetElement(isolate, 1), clone->GetElement(isolate, 0));
828 CHECK_EQ(obj->GetElement(isolate, 0), clone->GetElement(isolate, 1)); 828 CHECK_EQ(obj->GetElement(isolate, 0), clone->GetElement(isolate, 1));
829 829
830 CHECK_EQ(obj->GetProperty(*second), clone->GetProperty(*first)); 830 CHECK_EQ(obj->GetProperty(*second), clone->GetProperty(*first));
831 CHECK_EQ(obj->GetProperty(*first), clone->GetProperty(*second)); 831 CHECK_EQ(obj->GetProperty(*first), clone->GetProperty(*second));
832 } 832 }
833 833
834 834
835 TEST(StringAllocation) { 835 TEST(StringAllocation) {
836 CcTest::InitializeVM(); 836 CcTest::InitializeVM();
837 Isolate* isolate = Isolate::Current(); 837 Isolate* isolate = CcTest::i_isolate();
838 Factory* factory = isolate->factory(); 838 Factory* factory = isolate->factory();
839 839
840 const unsigned char chars[] = { 0xe5, 0xa4, 0xa7 }; 840 const unsigned char chars[] = { 0xe5, 0xa4, 0xa7 };
841 for (int length = 0; length < 100; length++) { 841 for (int length = 0; length < 100; length++) {
842 v8::HandleScope scope(CcTest::isolate()); 842 v8::HandleScope scope(CcTest::isolate());
843 char* non_ascii = NewArray<char>(3 * length + 1); 843 char* non_ascii = NewArray<char>(3 * length + 1);
844 char* ascii = NewArray<char>(length + 1); 844 char* ascii = NewArray<char>(length + 1);
845 non_ascii[3 * length] = 0; 845 non_ascii[3 * length] = 0;
846 ascii[length] = 0; 846 ascii[length] = 0;
847 for (int i = 0; i < length; i++) { 847 for (int i = 0; i < length; i++) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 found_count++; 882 found_count++;
883 } 883 }
884 } 884 }
885 } 885 }
886 return found_count; 886 return found_count;
887 } 887 }
888 888
889 889
890 TEST(Iteration) { 890 TEST(Iteration) {
891 CcTest::InitializeVM(); 891 CcTest::InitializeVM();
892 Isolate* isolate = Isolate::Current(); 892 Isolate* isolate = CcTest::i_isolate();
893 Factory* factory = isolate->factory(); 893 Factory* factory = isolate->factory();
894 v8::HandleScope scope(CcTest::isolate()); 894 v8::HandleScope scope(CcTest::isolate());
895 895
896 // Array of objects to scan haep for. 896 // Array of objects to scan haep for.
897 const int objs_count = 6; 897 const int objs_count = 6;
898 Handle<Object> objs[objs_count]; 898 Handle<Object> objs[objs_count];
899 int next_objs_index = 0; 899 int next_objs_index = 0;
900 900
901 // Allocate a JS array to OLD_POINTER_SPACE and NEW_SPACE 901 // Allocate a JS array to OLD_POINTER_SPACE and NEW_SPACE
902 objs[next_objs_index++] = factory->NewJSArray(10); 902 objs[next_objs_index++] = factory->NewJSArray(10);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 944
945 945
946 static int LenFromSize(int size) { 946 static int LenFromSize(int size) {
947 return (size - FixedArray::kHeaderSize) / kPointerSize; 947 return (size - FixedArray::kHeaderSize) / kPointerSize;
948 } 948 }
949 949
950 950
951 TEST(Regression39128) { 951 TEST(Regression39128) {
952 // Test case for crbug.com/39128. 952 // Test case for crbug.com/39128.
953 CcTest::InitializeVM(); 953 CcTest::InitializeVM();
954 Isolate* isolate = Isolate::Current(); 954 Isolate* isolate = CcTest::i_isolate();
955 Factory* factory = isolate->factory(); 955 Factory* factory = isolate->factory();
956 956
957 // Increase the chance of 'bump-the-pointer' allocation in old space. 957 // Increase the chance of 'bump-the-pointer' allocation in old space.
958 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 958 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
959 959
960 v8::HandleScope scope(CcTest::isolate()); 960 v8::HandleScope scope(CcTest::isolate());
961 961
962 // The plan: create JSObject which references objects in new space. 962 // The plan: create JSObject which references objects in new space.
963 // Then clone this object (forcing it to go into old space) and check 963 // Then clone this object (forcing it to go into old space) and check
964 // that region dirty marks are updated correctly. 964 // that region dirty marks are updated correctly.
965 965
966 // Step 1: prepare a map for the object. We add 1 inobject property to it. 966 // Step 1: prepare a map for the object. We add 1 inobject property to it.
967 Handle<JSFunction> object_ctor( 967 Handle<JSFunction> object_ctor(
968 Isolate::Current()->native_context()->object_function()); 968 CcTest::i_isolate()->native_context()->object_function());
969 CHECK(object_ctor->has_initial_map()); 969 CHECK(object_ctor->has_initial_map());
970 Handle<Map> object_map(object_ctor->initial_map()); 970 Handle<Map> object_map(object_ctor->initial_map());
971 // Create a map with single inobject property. 971 // Create a map with single inobject property.
972 Handle<Map> my_map = factory->CopyMap(object_map, 1); 972 Handle<Map> my_map = factory->CopyMap(object_map, 1);
973 int n_properties = my_map->inobject_properties(); 973 int n_properties = my_map->inobject_properties();
974 CHECK_GT(n_properties, 0); 974 CHECK_GT(n_properties, 0);
975 975
976 int object_size = my_map->instance_size(); 976 int object_size = my_map->instance_size();
977 977
978 // Step 2: allocate a lot of objects so to almost fill new space: we need 978 // Step 2: allocate a lot of objects so to almost fill new space: we need
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 } 1023 }
1024 CHECK(HEAP->old_pointer_space()->Contains(clone->address())); 1024 CHECK(HEAP->old_pointer_space()->Contains(clone->address()));
1025 } 1025 }
1026 1026
1027 1027
1028 TEST(TestCodeFlushing) { 1028 TEST(TestCodeFlushing) {
1029 // If we do not flush code this test is invalid. 1029 // If we do not flush code this test is invalid.
1030 if (!FLAG_flush_code) return; 1030 if (!FLAG_flush_code) return;
1031 i::FLAG_allow_natives_syntax = true; 1031 i::FLAG_allow_natives_syntax = true;
1032 CcTest::InitializeVM(); 1032 CcTest::InitializeVM();
1033 Isolate* isolate = Isolate::Current(); 1033 Isolate* isolate = CcTest::i_isolate();
1034 Factory* factory = isolate->factory(); 1034 Factory* factory = isolate->factory();
1035 v8::HandleScope scope(CcTest::isolate()); 1035 v8::HandleScope scope(CcTest::isolate());
1036 const char* source = "function foo() {" 1036 const char* source = "function foo() {"
1037 " var x = 42;" 1037 " var x = 42;"
1038 " var y = 42;" 1038 " var y = 42;"
1039 " var z = x + y;" 1039 " var z = x + y;"
1040 "};" 1040 "};"
1041 "foo()"; 1041 "foo()";
1042 Handle<String> foo_name = factory->InternalizeUtf8String("foo"); 1042 Handle<String> foo_name = factory->InternalizeUtf8String("foo");
1043 1043
1044 // This compile will add the code to the compilation cache. 1044 // This compile will add the code to the compilation cache.
1045 { v8::HandleScope scope(CcTest::isolate()); 1045 { v8::HandleScope scope(CcTest::isolate());
1046 CompileRun(source); 1046 CompileRun(source);
1047 } 1047 }
1048 1048
1049 // Check function is compiled. 1049 // Check function is compiled.
1050 Object* func_value = Isolate::Current()->context()->global_object()-> 1050 Object* func_value = CcTest::i_isolate()->context()->global_object()->
1051 GetProperty(*foo_name)->ToObjectChecked(); 1051 GetProperty(*foo_name)->ToObjectChecked();
1052 CHECK(func_value->IsJSFunction()); 1052 CHECK(func_value->IsJSFunction());
1053 Handle<JSFunction> function(JSFunction::cast(func_value)); 1053 Handle<JSFunction> function(JSFunction::cast(func_value));
1054 CHECK(function->shared()->is_compiled()); 1054 CHECK(function->shared()->is_compiled());
1055 1055
1056 // The code will survive at least two GCs. 1056 // The code will survive at least two GCs.
1057 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 1057 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1058 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 1058 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1059 CHECK(function->shared()->is_compiled()); 1059 CHECK(function->shared()->is_compiled());
1060 1060
(...skipping 11 matching lines...) Expand all
1072 CHECK(function->shared()->is_compiled()); 1072 CHECK(function->shared()->is_compiled());
1073 CHECK(function->is_compiled()); 1073 CHECK(function->is_compiled());
1074 } 1074 }
1075 1075
1076 1076
1077 TEST(TestCodeFlushingIncremental) { 1077 TEST(TestCodeFlushingIncremental) {
1078 // If we do not flush code this test is invalid. 1078 // If we do not flush code this test is invalid.
1079 if (!FLAG_flush_code || !FLAG_flush_code_incrementally) return; 1079 if (!FLAG_flush_code || !FLAG_flush_code_incrementally) return;
1080 i::FLAG_allow_natives_syntax = true; 1080 i::FLAG_allow_natives_syntax = true;
1081 CcTest::InitializeVM(); 1081 CcTest::InitializeVM();
1082 Isolate* isolate = Isolate::Current(); 1082 Isolate* isolate = CcTest::i_isolate();
1083 Factory* factory = isolate->factory(); 1083 Factory* factory = isolate->factory();
1084 v8::HandleScope scope(CcTest::isolate()); 1084 v8::HandleScope scope(CcTest::isolate());
1085 const char* source = "function foo() {" 1085 const char* source = "function foo() {"
1086 " var x = 42;" 1086 " var x = 42;"
1087 " var y = 42;" 1087 " var y = 42;"
1088 " var z = x + y;" 1088 " var z = x + y;"
1089 "};" 1089 "};"
1090 "foo()"; 1090 "foo()";
1091 Handle<String> foo_name = factory->InternalizeUtf8String("foo"); 1091 Handle<String> foo_name = factory->InternalizeUtf8String("foo");
1092 1092
1093 // This compile will add the code to the compilation cache. 1093 // This compile will add the code to the compilation cache.
1094 { v8::HandleScope scope(CcTest::isolate()); 1094 { v8::HandleScope scope(CcTest::isolate());
1095 CompileRun(source); 1095 CompileRun(source);
1096 } 1096 }
1097 1097
1098 // Check function is compiled. 1098 // Check function is compiled.
1099 Object* func_value = Isolate::Current()->context()->global_object()-> 1099 Object* func_value = CcTest::i_isolate()->context()->global_object()->
1100 GetProperty(*foo_name)->ToObjectChecked(); 1100 GetProperty(*foo_name)->ToObjectChecked();
1101 CHECK(func_value->IsJSFunction()); 1101 CHECK(func_value->IsJSFunction());
1102 Handle<JSFunction> function(JSFunction::cast(func_value)); 1102 Handle<JSFunction> function(JSFunction::cast(func_value));
1103 CHECK(function->shared()->is_compiled()); 1103 CHECK(function->shared()->is_compiled());
1104 1104
1105 // The code will survive at least two GCs. 1105 // The code will survive at least two GCs.
1106 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 1106 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1107 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 1107 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1108 CHECK(function->shared()->is_compiled()); 1108 CHECK(function->shared()->is_compiled());
1109 1109
(...skipping 30 matching lines...) Expand all
1140 CHECK(function->shared()->is_compiled() || !function->IsOptimized()); 1140 CHECK(function->shared()->is_compiled() || !function->IsOptimized());
1141 CHECK(function->is_compiled() || !function->IsOptimized()); 1141 CHECK(function->is_compiled() || !function->IsOptimized());
1142 } 1142 }
1143 1143
1144 1144
1145 TEST(TestCodeFlushingIncrementalScavenge) { 1145 TEST(TestCodeFlushingIncrementalScavenge) {
1146 // If we do not flush code this test is invalid. 1146 // If we do not flush code this test is invalid.
1147 if (!FLAG_flush_code || !FLAG_flush_code_incrementally) return; 1147 if (!FLAG_flush_code || !FLAG_flush_code_incrementally) return;
1148 i::FLAG_allow_natives_syntax = true; 1148 i::FLAG_allow_natives_syntax = true;
1149 CcTest::InitializeVM(); 1149 CcTest::InitializeVM();
1150 Isolate* isolate = Isolate::Current(); 1150 Isolate* isolate = CcTest::i_isolate();
1151 Factory* factory = isolate->factory(); 1151 Factory* factory = isolate->factory();
1152 v8::HandleScope scope(CcTest::isolate()); 1152 v8::HandleScope scope(CcTest::isolate());
1153 const char* source = "var foo = function() {" 1153 const char* source = "var foo = function() {"
1154 " var x = 42;" 1154 " var x = 42;"
1155 " var y = 42;" 1155 " var y = 42;"
1156 " var z = x + y;" 1156 " var z = x + y;"
1157 "};" 1157 "};"
1158 "foo();" 1158 "foo();"
1159 "var bar = function() {" 1159 "var bar = function() {"
1160 " var x = 23;" 1160 " var x = 23;"
1161 "};" 1161 "};"
1162 "bar();"; 1162 "bar();";
1163 Handle<String> foo_name = factory->InternalizeUtf8String("foo"); 1163 Handle<String> foo_name = factory->InternalizeUtf8String("foo");
1164 Handle<String> bar_name = factory->InternalizeUtf8String("bar"); 1164 Handle<String> bar_name = factory->InternalizeUtf8String("bar");
1165 1165
1166 // Perfrom one initial GC to enable code flushing. 1166 // Perfrom one initial GC to enable code flushing.
1167 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 1167 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1168 1168
1169 // This compile will add the code to the compilation cache. 1169 // This compile will add the code to the compilation cache.
1170 { v8::HandleScope scope(CcTest::isolate()); 1170 { v8::HandleScope scope(CcTest::isolate());
1171 CompileRun(source); 1171 CompileRun(source);
1172 } 1172 }
1173 1173
1174 // Check functions are compiled. 1174 // Check functions are compiled.
1175 Object* func_value = Isolate::Current()->context()->global_object()-> 1175 Object* func_value = CcTest::i_isolate()->context()->global_object()->
1176 GetProperty(*foo_name)->ToObjectChecked(); 1176 GetProperty(*foo_name)->ToObjectChecked();
1177 CHECK(func_value->IsJSFunction()); 1177 CHECK(func_value->IsJSFunction());
1178 Handle<JSFunction> function(JSFunction::cast(func_value)); 1178 Handle<JSFunction> function(JSFunction::cast(func_value));
1179 CHECK(function->shared()->is_compiled()); 1179 CHECK(function->shared()->is_compiled());
1180 Object* func_value2 = Isolate::Current()->context()->global_object()-> 1180 Object* func_value2 = CcTest::i_isolate()->context()->global_object()->
1181 GetProperty(*bar_name)->ToObjectChecked(); 1181 GetProperty(*bar_name)->ToObjectChecked();
1182 CHECK(func_value2->IsJSFunction()); 1182 CHECK(func_value2->IsJSFunction());
1183 Handle<JSFunction> function2(JSFunction::cast(func_value2)); 1183 Handle<JSFunction> function2(JSFunction::cast(func_value2));
1184 CHECK(function2->shared()->is_compiled()); 1184 CHECK(function2->shared()->is_compiled());
1185 1185
1186 // Clear references to functions so that one of them can die. 1186 // Clear references to functions so that one of them can die.
1187 { v8::HandleScope scope(CcTest::isolate()); 1187 { v8::HandleScope scope(CcTest::isolate());
1188 CompileRun("foo = 0; bar = 0;"); 1188 CompileRun("foo = 0; bar = 0;");
1189 } 1189 }
1190 1190
(...skipping 17 matching lines...) Expand all
1208 CHECK(!function->shared()->is_compiled() || function->IsOptimized()); 1208 CHECK(!function->shared()->is_compiled() || function->IsOptimized());
1209 CHECK(!function->is_compiled() || function->IsOptimized()); 1209 CHECK(!function->is_compiled() || function->IsOptimized());
1210 } 1210 }
1211 1211
1212 1212
1213 TEST(TestCodeFlushingIncrementalAbort) { 1213 TEST(TestCodeFlushingIncrementalAbort) {
1214 // If we do not flush code this test is invalid. 1214 // If we do not flush code this test is invalid.
1215 if (!FLAG_flush_code || !FLAG_flush_code_incrementally) return; 1215 if (!FLAG_flush_code || !FLAG_flush_code_incrementally) return;
1216 i::FLAG_allow_natives_syntax = true; 1216 i::FLAG_allow_natives_syntax = true;
1217 CcTest::InitializeVM(); 1217 CcTest::InitializeVM();
1218 Isolate* isolate = Isolate::Current(); 1218 Isolate* isolate = CcTest::i_isolate();
1219 Factory* factory = isolate->factory(); 1219 Factory* factory = isolate->factory();
1220 Heap* heap = isolate->heap(); 1220 Heap* heap = isolate->heap();
1221 v8::HandleScope scope(CcTest::isolate()); 1221 v8::HandleScope scope(CcTest::isolate());
1222 const char* source = "function foo() {" 1222 const char* source = "function foo() {"
1223 " var x = 42;" 1223 " var x = 42;"
1224 " var y = 42;" 1224 " var y = 42;"
1225 " var z = x + y;" 1225 " var z = x + y;"
1226 "};" 1226 "};"
1227 "foo()"; 1227 "foo()";
1228 Handle<String> foo_name = factory->InternalizeUtf8String("foo"); 1228 Handle<String> foo_name = factory->InternalizeUtf8String("foo");
1229 1229
1230 // This compile will add the code to the compilation cache. 1230 // This compile will add the code to the compilation cache.
1231 { v8::HandleScope scope(CcTest::isolate()); 1231 { v8::HandleScope scope(CcTest::isolate());
1232 CompileRun(source); 1232 CompileRun(source);
1233 } 1233 }
1234 1234
1235 // Check function is compiled. 1235 // Check function is compiled.
1236 Object* func_value = Isolate::Current()->context()->global_object()-> 1236 Object* func_value = CcTest::i_isolate()->context()->global_object()->
1237 GetProperty(*foo_name)->ToObjectChecked(); 1237 GetProperty(*foo_name)->ToObjectChecked();
1238 CHECK(func_value->IsJSFunction()); 1238 CHECK(func_value->IsJSFunction());
1239 Handle<JSFunction> function(JSFunction::cast(func_value)); 1239 Handle<JSFunction> function(JSFunction::cast(func_value));
1240 CHECK(function->shared()->is_compiled()); 1240 CHECK(function->shared()->is_compiled());
1241 1241
1242 // The code will survive at least two GCs. 1242 // The code will survive at least two GCs.
1243 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 1243 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1244 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 1244 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
1245 CHECK(function->shared()->is_compiled()); 1245 CHECK(function->shared()->is_compiled());
1246 1246
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1304 1304
1305 TEST(TestInternalWeakLists) { 1305 TEST(TestInternalWeakLists) {
1306 v8::V8::Initialize(); 1306 v8::V8::Initialize();
1307 1307
1308 // Some flags turn Scavenge collections into Mark-sweep collections 1308 // Some flags turn Scavenge collections into Mark-sweep collections
1309 // and hence are incompatible with this test case. 1309 // and hence are incompatible with this test case.
1310 if (FLAG_gc_global || FLAG_stress_compaction) return; 1310 if (FLAG_gc_global || FLAG_stress_compaction) return;
1311 1311
1312 static const int kNumTestContexts = 10; 1312 static const int kNumTestContexts = 10;
1313 1313
1314 Isolate* isolate = Isolate::Current(); 1314 Isolate* isolate = CcTest::i_isolate();
1315 Heap* heap = isolate->heap(); 1315 Heap* heap = isolate->heap();
1316 HandleScope scope(isolate); 1316 HandleScope scope(isolate);
1317 v8::Handle<v8::Context> ctx[kNumTestContexts]; 1317 v8::Handle<v8::Context> ctx[kNumTestContexts];
1318 1318
1319 CHECK_EQ(0, CountNativeContexts()); 1319 CHECK_EQ(0, CountNativeContexts());
1320 1320
1321 // Create a number of global contests which gets linked together. 1321 // Create a number of global contests which gets linked together.
1322 for (int i = 0; i < kNumTestContexts; i++) { 1322 for (int i = 0; i < kNumTestContexts; i++) {
1323 ctx[i] = v8::Context::New(CcTest::isolate()); 1323 ctx[i] = v8::Context::New(CcTest::isolate());
1324 1324
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1447 object = Handle<Object>( 1447 object = Handle<Object>(
1448 Object::cast(JSFunction::cast(*object)->next_function_link()), 1448 Object::cast(JSFunction::cast(*object)->next_function_link()),
1449 isolate); 1449 isolate);
1450 } 1450 }
1451 return count; 1451 return count;
1452 } 1452 }
1453 1453
1454 1454
1455 TEST(TestInternalWeakListsTraverseWithGC) { 1455 TEST(TestInternalWeakListsTraverseWithGC) {
1456 v8::V8::Initialize(); 1456 v8::V8::Initialize();
1457 Isolate* isolate = Isolate::Current(); 1457 Isolate* isolate = CcTest::i_isolate();
1458 1458
1459 static const int kNumTestContexts = 10; 1459 static const int kNumTestContexts = 10;
1460 1460
1461 HandleScope scope(isolate); 1461 HandleScope scope(isolate);
1462 v8::Handle<v8::Context> ctx[kNumTestContexts]; 1462 v8::Handle<v8::Context> ctx[kNumTestContexts];
1463 1463
1464 CHECK_EQ(0, CountNativeContexts()); 1464 CHECK_EQ(0, CountNativeContexts());
1465 1465
1466 // Create an number of contexts and check the length of the weak list both 1466 // Create an number of contexts and check the length of the weak list both
1467 // with and without GCs while iterating the list. 1467 // with and without GCs while iterating the list.
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
1864 } 1864 }
1865 1865
1866 1866
1867 TEST(InstanceOfStubWriteBarrier) { 1867 TEST(InstanceOfStubWriteBarrier) {
1868 i::FLAG_allow_natives_syntax = true; 1868 i::FLAG_allow_natives_syntax = true;
1869 #ifdef VERIFY_HEAP 1869 #ifdef VERIFY_HEAP
1870 i::FLAG_verify_heap = true; 1870 i::FLAG_verify_heap = true;
1871 #endif 1871 #endif
1872 1872
1873 CcTest::InitializeVM(); 1873 CcTest::InitializeVM();
1874 if (!i::Isolate::Current()->use_crankshaft()) return; 1874 if (!CcTest::i_isolate()->use_crankshaft()) return;
1875 if (i::FLAG_force_marking_deque_overflows) return; 1875 if (i::FLAG_force_marking_deque_overflows) return;
1876 v8::HandleScope outer_scope(CcTest::isolate()); 1876 v8::HandleScope outer_scope(CcTest::isolate());
1877 1877
1878 { 1878 {
1879 v8::HandleScope scope(CcTest::isolate()); 1879 v8::HandleScope scope(CcTest::isolate());
1880 CompileRun( 1880 CompileRun(
1881 "function foo () { }" 1881 "function foo () { }"
1882 "function mkbar () { return new (new Function(\"\")) (); }" 1882 "function mkbar () { return new (new Function(\"\")) (); }"
1883 "function f (x) { return (x instanceof foo); }" 1883 "function f (x) { return (x instanceof foo); }"
1884 "function g () { f(mkbar()); }" 1884 "function g () { f(mkbar()); }"
(...skipping 30 matching lines...) Expand all
1915 g->Call(global, 0, NULL); 1915 g->Call(global, 0, NULL);
1916 } 1916 }
1917 1917
1918 HEAP->incremental_marking()->set_should_hurry(true); 1918 HEAP->incremental_marking()->set_should_hurry(true);
1919 HEAP->CollectGarbage(OLD_POINTER_SPACE); 1919 HEAP->CollectGarbage(OLD_POINTER_SPACE);
1920 } 1920 }
1921 1921
1922 1922
1923 TEST(PrototypeTransitionClearing) { 1923 TEST(PrototypeTransitionClearing) {
1924 CcTest::InitializeVM(); 1924 CcTest::InitializeVM();
1925 Isolate* isolate = Isolate::Current(); 1925 Isolate* isolate = CcTest::i_isolate();
1926 Factory* factory = isolate->factory(); 1926 Factory* factory = isolate->factory();
1927 v8::HandleScope scope(CcTest::isolate()); 1927 v8::HandleScope scope(CcTest::isolate());
1928 1928
1929 CompileRun( 1929 CompileRun(
1930 "var base = {};" 1930 "var base = {};"
1931 "var live = [];" 1931 "var live = [];"
1932 "for (var i = 0; i < 10; i++) {" 1932 "for (var i = 0; i < 10; i++) {"
1933 " var object = {};" 1933 " var object = {};"
1934 " var prototype = {};" 1934 " var prototype = {};"
1935 " object.__proto__ = prototype;" 1935 " object.__proto__ = prototype;"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1981 1981
1982 1982
1983 TEST(ResetSharedFunctionInfoCountersDuringIncrementalMarking) { 1983 TEST(ResetSharedFunctionInfoCountersDuringIncrementalMarking) {
1984 i::FLAG_stress_compaction = false; 1984 i::FLAG_stress_compaction = false;
1985 i::FLAG_allow_natives_syntax = true; 1985 i::FLAG_allow_natives_syntax = true;
1986 #ifdef VERIFY_HEAP 1986 #ifdef VERIFY_HEAP
1987 i::FLAG_verify_heap = true; 1987 i::FLAG_verify_heap = true;
1988 #endif 1988 #endif
1989 1989
1990 CcTest::InitializeVM(); 1990 CcTest::InitializeVM();
1991 if (!i::Isolate::Current()->use_crankshaft()) return; 1991 if (!CcTest::i_isolate()->use_crankshaft()) return;
1992 v8::HandleScope outer_scope(CcTest::isolate()); 1992 v8::HandleScope outer_scope(CcTest::isolate());
1993 1993
1994 { 1994 {
1995 v8::HandleScope scope(CcTest::isolate()); 1995 v8::HandleScope scope(CcTest::isolate());
1996 CompileRun( 1996 CompileRun(
1997 "function f () {" 1997 "function f () {"
1998 " var s = 0;" 1998 " var s = 0;"
1999 " for (var i = 0; i < 100; i++) s += i;" 1999 " for (var i = 0; i < 100; i++) s += i;"
2000 " return s;" 2000 " return s;"
2001 "}" 2001 "}"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2038 2038
2039 2039
2040 TEST(ResetSharedFunctionInfoCountersDuringMarkSweep) { 2040 TEST(ResetSharedFunctionInfoCountersDuringMarkSweep) {
2041 i::FLAG_stress_compaction = false; 2041 i::FLAG_stress_compaction = false;
2042 i::FLAG_allow_natives_syntax = true; 2042 i::FLAG_allow_natives_syntax = true;
2043 #ifdef VERIFY_HEAP 2043 #ifdef VERIFY_HEAP
2044 i::FLAG_verify_heap = true; 2044 i::FLAG_verify_heap = true;
2045 #endif 2045 #endif
2046 2046
2047 CcTest::InitializeVM(); 2047 CcTest::InitializeVM();
2048 if (!i::Isolate::Current()->use_crankshaft()) return; 2048 if (!CcTest::i_isolate()->use_crankshaft()) return;
2049 v8::HandleScope outer_scope(CcTest::isolate()); 2049 v8::HandleScope outer_scope(CcTest::isolate());
2050 2050
2051 { 2051 {
2052 v8::HandleScope scope(CcTest::isolate()); 2052 v8::HandleScope scope(CcTest::isolate());
2053 CompileRun( 2053 CompileRun(
2054 "function f () {" 2054 "function f () {"
2055 " var s = 0;" 2055 " var s = 0;"
2056 " for (var i = 0; i < 100; i++) s += i;" 2056 " for (var i = 0; i < 100; i++) s += i;"
2057 " return s;" 2057 " return s;"
2058 "}" 2058 "}"
(...skipping 18 matching lines...) Expand all
2077 CHECK_EQ(HEAP->global_ic_age(), f->shared()->ic_age()); 2077 CHECK_EQ(HEAP->global_ic_age(), f->shared()->ic_age());
2078 CHECK_EQ(0, f->shared()->opt_count()); 2078 CHECK_EQ(0, f->shared()->opt_count());
2079 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); 2079 CHECK_EQ(0, f->shared()->code()->profiler_ticks());
2080 } 2080 }
2081 2081
2082 2082
2083 // Test that HAllocateObject will always return an object in new-space. 2083 // Test that HAllocateObject will always return an object in new-space.
2084 TEST(OptimizedAllocationAlwaysInNewSpace) { 2084 TEST(OptimizedAllocationAlwaysInNewSpace) {
2085 i::FLAG_allow_natives_syntax = true; 2085 i::FLAG_allow_natives_syntax = true;
2086 CcTest::InitializeVM(); 2086 CcTest::InitializeVM();
2087 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2087 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2088 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2088 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2089 v8::HandleScope scope(CcTest::isolate()); 2089 v8::HandleScope scope(CcTest::isolate());
2090 2090
2091 SimulateFullSpace(HEAP->new_space()); 2091 SimulateFullSpace(HEAP->new_space());
2092 AlwaysAllocateScope always_allocate; 2092 AlwaysAllocateScope always_allocate;
2093 v8::Local<v8::Value> res = CompileRun( 2093 v8::Local<v8::Value> res = CompileRun(
2094 "function c(x) {" 2094 "function c(x) {"
2095 " this.x = x;" 2095 " this.x = x;"
2096 " for (var i = 0; i < 32; i++) {" 2096 " for (var i = 0; i < 32; i++) {"
2097 " this['x' + i] = x;" 2097 " this['x' + i] = x;"
2098 " }" 2098 " }"
2099 "}" 2099 "}"
2100 "function f(x) { return new c(x); };" 2100 "function f(x) { return new c(x); };"
2101 "f(1); f(2); f(3);" 2101 "f(1); f(2); f(3);"
2102 "%OptimizeFunctionOnNextCall(f);" 2102 "%OptimizeFunctionOnNextCall(f);"
2103 "f(4);"); 2103 "f(4);");
2104 CHECK_EQ(4, res->ToObject()->GetRealNamedProperty(v8_str("x"))->Int32Value()); 2104 CHECK_EQ(4, res->ToObject()->GetRealNamedProperty(v8_str("x"))->Int32Value());
2105 2105
2106 Handle<JSObject> o = 2106 Handle<JSObject> o =
2107 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2107 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2108 2108
2109 CHECK(HEAP->InNewSpace(*o)); 2109 CHECK(HEAP->InNewSpace(*o));
2110 } 2110 }
2111 2111
2112 2112
2113 TEST(OptimizedPretenuringAllocationFolding) { 2113 TEST(OptimizedPretenuringAllocationFolding) {
2114 i::FLAG_allow_natives_syntax = true; 2114 i::FLAG_allow_natives_syntax = true;
2115 CcTest::InitializeVM(); 2115 CcTest::InitializeVM();
2116 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2116 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2117 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2117 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2118 v8::HandleScope scope(CcTest::isolate()); 2118 v8::HandleScope scope(CcTest::isolate());
2119 HEAP->SetNewSpaceHighPromotionModeActive(true); 2119 HEAP->SetNewSpaceHighPromotionModeActive(true);
2120 2120
2121 v8::Local<v8::Value> res = CompileRun( 2121 v8::Local<v8::Value> res = CompileRun(
2122 "function DataObject() {" 2122 "function DataObject() {"
2123 " this.a = 1.1;" 2123 " this.a = 1.1;"
2124 " this.b = [{}];" 2124 " this.b = [{}];"
2125 " this.c = 1.2;" 2125 " this.c = 1.2;"
2126 " this.d = [{}];" 2126 " this.d = [{}];"
(...skipping 15 matching lines...) Expand all
2142 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2))); 2142 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2)));
2143 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(3))); 2143 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(3)));
2144 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(4))); 2144 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(4)));
2145 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(5))); 2145 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(5)));
2146 } 2146 }
2147 2147
2148 2148
2149 TEST(OptimizedPretenuringAllocationFoldingBlocks) { 2149 TEST(OptimizedPretenuringAllocationFoldingBlocks) {
2150 i::FLAG_allow_natives_syntax = true; 2150 i::FLAG_allow_natives_syntax = true;
2151 CcTest::InitializeVM(); 2151 CcTest::InitializeVM();
2152 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2152 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2153 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2153 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2154 v8::HandleScope scope(CcTest::isolate()); 2154 v8::HandleScope scope(CcTest::isolate());
2155 HEAP->SetNewSpaceHighPromotionModeActive(true); 2155 HEAP->SetNewSpaceHighPromotionModeActive(true);
2156 2156
2157 v8::Local<v8::Value> res = CompileRun( 2157 v8::Local<v8::Value> res = CompileRun(
2158 "function DataObject() {" 2158 "function DataObject() {"
2159 " this.a = [{}];" 2159 " this.a = [{}];"
2160 " this.b = [{}];" 2160 " this.b = [{}];"
2161 " this.c = 1.1;" 2161 " this.c = 1.1;"
2162 " this.d = 1.2;" 2162 " this.d = 1.2;"
(...skipping 15 matching lines...) Expand all
2178 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2))); 2178 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(2)));
2179 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(3))); 2179 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(3)));
2180 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(4))); 2180 CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(4)));
2181 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(5))); 2181 CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(5)));
2182 } 2182 }
2183 2183
2184 2184
2185 TEST(OptimizedPretenuringObjectArrayLiterals) { 2185 TEST(OptimizedPretenuringObjectArrayLiterals) {
2186 i::FLAG_allow_natives_syntax = true; 2186 i::FLAG_allow_natives_syntax = true;
2187 CcTest::InitializeVM(); 2187 CcTest::InitializeVM();
2188 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2188 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2189 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2189 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2190 v8::HandleScope scope(CcTest::isolate()); 2190 v8::HandleScope scope(CcTest::isolate());
2191 HEAP->SetNewSpaceHighPromotionModeActive(true); 2191 HEAP->SetNewSpaceHighPromotionModeActive(true);
2192 2192
2193 v8::Local<v8::Value> res = CompileRun( 2193 v8::Local<v8::Value> res = CompileRun(
2194 "function f() {" 2194 "function f() {"
2195 " var numbers = [{}, {}, {}];" 2195 " var numbers = [{}, {}, {}];"
2196 " return numbers;" 2196 " return numbers;"
2197 "};" 2197 "};"
2198 "f(); f(); f();" 2198 "f(); f(); f();"
2199 "%OptimizeFunctionOnNextCall(f);" 2199 "%OptimizeFunctionOnNextCall(f);"
2200 "f();"); 2200 "f();");
2201 2201
2202 Handle<JSObject> o = 2202 Handle<JSObject> o =
2203 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2203 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2204 2204
2205 CHECK(HEAP->InOldPointerSpace(o->elements())); 2205 CHECK(HEAP->InOldPointerSpace(o->elements()));
2206 CHECK(HEAP->InOldPointerSpace(*o)); 2206 CHECK(HEAP->InOldPointerSpace(*o));
2207 } 2207 }
2208 2208
2209 2209
2210 TEST(OptimizedPretenuringMixedInObjectProperties) { 2210 TEST(OptimizedPretenuringMixedInObjectProperties) {
2211 i::FLAG_allow_natives_syntax = true; 2211 i::FLAG_allow_natives_syntax = true;
2212 CcTest::InitializeVM(); 2212 CcTest::InitializeVM();
2213 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2213 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2214 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2214 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2215 v8::HandleScope scope(CcTest::isolate()); 2215 v8::HandleScope scope(CcTest::isolate());
2216 HEAP->SetNewSpaceHighPromotionModeActive(true); 2216 HEAP->SetNewSpaceHighPromotionModeActive(true);
2217 2217
2218 v8::Local<v8::Value> res = CompileRun( 2218 v8::Local<v8::Value> res = CompileRun(
2219 "function f() {" 2219 "function f() {"
2220 " var numbers = {a: {c: 2.2, d: {}}, b: 1.1};" 2220 " var numbers = {a: {c: 2.2, d: {}}, b: 1.1};"
2221 " return numbers;" 2221 " return numbers;"
2222 "};" 2222 "};"
2223 "f(); f(); f();" 2223 "f(); f(); f();"
(...skipping 10 matching lines...) Expand all
2234 JSObject* inner_object = reinterpret_cast<JSObject*>(o->RawFastPropertyAt(0)); 2234 JSObject* inner_object = reinterpret_cast<JSObject*>(o->RawFastPropertyAt(0));
2235 CHECK(HEAP->InOldPointerSpace(inner_object)); 2235 CHECK(HEAP->InOldPointerSpace(inner_object));
2236 CHECK(HEAP->InOldDataSpace(inner_object->RawFastPropertyAt(0))); 2236 CHECK(HEAP->InOldDataSpace(inner_object->RawFastPropertyAt(0)));
2237 CHECK(HEAP->InOldPointerSpace(inner_object->RawFastPropertyAt(1))); 2237 CHECK(HEAP->InOldPointerSpace(inner_object->RawFastPropertyAt(1)));
2238 } 2238 }
2239 2239
2240 2240
2241 TEST(OptimizedPretenuringDoubleArrayProperties) { 2241 TEST(OptimizedPretenuringDoubleArrayProperties) {
2242 i::FLAG_allow_natives_syntax = true; 2242 i::FLAG_allow_natives_syntax = true;
2243 CcTest::InitializeVM(); 2243 CcTest::InitializeVM();
2244 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2244 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2245 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2245 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2246 v8::HandleScope scope(CcTest::isolate()); 2246 v8::HandleScope scope(CcTest::isolate());
2247 HEAP->SetNewSpaceHighPromotionModeActive(true); 2247 HEAP->SetNewSpaceHighPromotionModeActive(true);
2248 2248
2249 v8::Local<v8::Value> res = CompileRun( 2249 v8::Local<v8::Value> res = CompileRun(
2250 "function f() {" 2250 "function f() {"
2251 " var numbers = {a: 1.1, b: 2.2};" 2251 " var numbers = {a: 1.1, b: 2.2};"
2252 " return numbers;" 2252 " return numbers;"
2253 "};" 2253 "};"
2254 "f(); f(); f();" 2254 "f(); f(); f();"
2255 "%OptimizeFunctionOnNextCall(f);" 2255 "%OptimizeFunctionOnNextCall(f);"
2256 "f();"); 2256 "f();");
2257 2257
2258 Handle<JSObject> o = 2258 Handle<JSObject> o =
2259 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2259 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2260 2260
2261 CHECK(HEAP->InOldPointerSpace(*o)); 2261 CHECK(HEAP->InOldPointerSpace(*o));
2262 CHECK(HEAP->InOldDataSpace(o->properties())); 2262 CHECK(HEAP->InOldDataSpace(o->properties()));
2263 } 2263 }
2264 2264
2265 2265
2266 TEST(OptimizedPretenuringdoubleArrayLiterals) { 2266 TEST(OptimizedPretenuringdoubleArrayLiterals) {
2267 i::FLAG_allow_natives_syntax = true; 2267 i::FLAG_allow_natives_syntax = true;
2268 CcTest::InitializeVM(); 2268 CcTest::InitializeVM();
2269 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2269 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2270 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2270 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2271 v8::HandleScope scope(CcTest::isolate()); 2271 v8::HandleScope scope(CcTest::isolate());
2272 HEAP->SetNewSpaceHighPromotionModeActive(true); 2272 HEAP->SetNewSpaceHighPromotionModeActive(true);
2273 2273
2274 v8::Local<v8::Value> res = CompileRun( 2274 v8::Local<v8::Value> res = CompileRun(
2275 "function f() {" 2275 "function f() {"
2276 " var numbers = [1.1, 2.2, 3.3];" 2276 " var numbers = [1.1, 2.2, 3.3];"
2277 " return numbers;" 2277 " return numbers;"
2278 "};" 2278 "};"
2279 "f(); f(); f();" 2279 "f(); f(); f();"
2280 "%OptimizeFunctionOnNextCall(f);" 2280 "%OptimizeFunctionOnNextCall(f);"
2281 "f();"); 2281 "f();");
2282 2282
2283 Handle<JSObject> o = 2283 Handle<JSObject> o =
2284 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2284 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2285 2285
2286 CHECK(HEAP->InOldDataSpace(o->elements())); 2286 CHECK(HEAP->InOldDataSpace(o->elements()));
2287 CHECK(HEAP->InOldPointerSpace(*o)); 2287 CHECK(HEAP->InOldPointerSpace(*o));
2288 } 2288 }
2289 2289
2290 2290
2291 TEST(OptimizedPretenuringNestedMixedArrayLiterals) { 2291 TEST(OptimizedPretenuringNestedMixedArrayLiterals) {
2292 i::FLAG_allow_natives_syntax = true; 2292 i::FLAG_allow_natives_syntax = true;
2293 CcTest::InitializeVM(); 2293 CcTest::InitializeVM();
2294 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2294 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2295 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2295 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2296 v8::HandleScope scope(CcTest::isolate()); 2296 v8::HandleScope scope(CcTest::isolate());
2297 HEAP->SetNewSpaceHighPromotionModeActive(true); 2297 HEAP->SetNewSpaceHighPromotionModeActive(true);
2298 2298
2299 v8::Local<v8::Value> res = CompileRun( 2299 v8::Local<v8::Value> res = CompileRun(
2300 "function f() {" 2300 "function f() {"
2301 " var numbers = [[{}, {}, {}],[1.1, 2.2, 3.3]];" 2301 " var numbers = [[{}, {}, {}],[1.1, 2.2, 3.3]];"
2302 " return numbers;" 2302 " return numbers;"
2303 "};" 2303 "};"
2304 "f(); f(); f();" 2304 "f(); f(); f();"
(...skipping 13 matching lines...) Expand all
2318 CHECK(HEAP->InOldPointerSpace(*int_array_handle)); 2318 CHECK(HEAP->InOldPointerSpace(*int_array_handle));
2319 CHECK(HEAP->InOldPointerSpace(int_array_handle->elements())); 2319 CHECK(HEAP->InOldPointerSpace(int_array_handle->elements()));
2320 CHECK(HEAP->InOldPointerSpace(*double_array_handle)); 2320 CHECK(HEAP->InOldPointerSpace(*double_array_handle));
2321 CHECK(HEAP->InOldDataSpace(double_array_handle->elements())); 2321 CHECK(HEAP->InOldDataSpace(double_array_handle->elements()));
2322 } 2322 }
2323 2323
2324 2324
2325 TEST(OptimizedPretenuringNestedObjectLiterals) { 2325 TEST(OptimizedPretenuringNestedObjectLiterals) {
2326 i::FLAG_allow_natives_syntax = true; 2326 i::FLAG_allow_natives_syntax = true;
2327 CcTest::InitializeVM(); 2327 CcTest::InitializeVM();
2328 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2328 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2329 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2329 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2330 v8::HandleScope scope(CcTest::isolate()); 2330 v8::HandleScope scope(CcTest::isolate());
2331 HEAP->SetNewSpaceHighPromotionModeActive(true); 2331 HEAP->SetNewSpaceHighPromotionModeActive(true);
2332 2332
2333 v8::Local<v8::Value> res = CompileRun( 2333 v8::Local<v8::Value> res = CompileRun(
2334 "function f() {" 2334 "function f() {"
2335 " var numbers = [[{}, {}, {}],[{}, {}, {}]];" 2335 " var numbers = [[{}, {}, {}],[{}, {}, {}]];"
2336 " return numbers;" 2336 " return numbers;"
2337 "};" 2337 "};"
2338 "f(); f(); f();" 2338 "f(); f(); f();"
(...skipping 13 matching lines...) Expand all
2352 CHECK(HEAP->InOldPointerSpace(*int_array_handle_1)); 2352 CHECK(HEAP->InOldPointerSpace(*int_array_handle_1));
2353 CHECK(HEAP->InOldPointerSpace(int_array_handle_1->elements())); 2353 CHECK(HEAP->InOldPointerSpace(int_array_handle_1->elements()));
2354 CHECK(HEAP->InOldPointerSpace(*int_array_handle_2)); 2354 CHECK(HEAP->InOldPointerSpace(*int_array_handle_2));
2355 CHECK(HEAP->InOldPointerSpace(int_array_handle_2->elements())); 2355 CHECK(HEAP->InOldPointerSpace(int_array_handle_2->elements()));
2356 } 2356 }
2357 2357
2358 2358
2359 TEST(OptimizedPretenuringNestedDoubleLiterals) { 2359 TEST(OptimizedPretenuringNestedDoubleLiterals) {
2360 i::FLAG_allow_natives_syntax = true; 2360 i::FLAG_allow_natives_syntax = true;
2361 CcTest::InitializeVM(); 2361 CcTest::InitializeVM();
2362 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2362 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2363 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2363 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2364 v8::HandleScope scope(CcTest::isolate()); 2364 v8::HandleScope scope(CcTest::isolate());
2365 HEAP->SetNewSpaceHighPromotionModeActive(true); 2365 HEAP->SetNewSpaceHighPromotionModeActive(true);
2366 2366
2367 v8::Local<v8::Value> res = CompileRun( 2367 v8::Local<v8::Value> res = CompileRun(
2368 "function f() {" 2368 "function f() {"
2369 " var numbers = [[1.1, 1.2, 1.3],[2.1, 2.2, 2.3]];" 2369 " var numbers = [[1.1, 1.2, 1.3],[2.1, 2.2, 2.3]];"
2370 " return numbers;" 2370 " return numbers;"
2371 "};" 2371 "};"
2372 "f(); f(); f();" 2372 "f(); f(); f();"
(...skipping 16 matching lines...) Expand all
2389 CHECK(HEAP->InOldDataSpace(double_array_handle_1->elements())); 2389 CHECK(HEAP->InOldDataSpace(double_array_handle_1->elements()));
2390 CHECK(HEAP->InOldPointerSpace(*double_array_handle_2)); 2390 CHECK(HEAP->InOldPointerSpace(*double_array_handle_2));
2391 CHECK(HEAP->InOldDataSpace(double_array_handle_2->elements())); 2391 CHECK(HEAP->InOldDataSpace(double_array_handle_2->elements()));
2392 } 2392 }
2393 2393
2394 2394
2395 // Test regular array literals allocation. 2395 // Test regular array literals allocation.
2396 TEST(OptimizedAllocationArrayLiterals) { 2396 TEST(OptimizedAllocationArrayLiterals) {
2397 i::FLAG_allow_natives_syntax = true; 2397 i::FLAG_allow_natives_syntax = true;
2398 CcTest::InitializeVM(); 2398 CcTest::InitializeVM();
2399 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2399 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2400 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2400 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2401 v8::HandleScope scope(CcTest::isolate()); 2401 v8::HandleScope scope(CcTest::isolate());
2402 2402
2403 v8::Local<v8::Value> res = CompileRun( 2403 v8::Local<v8::Value> res = CompileRun(
2404 "function f() {" 2404 "function f() {"
2405 " var numbers = new Array(1, 2, 3);" 2405 " var numbers = new Array(1, 2, 3);"
2406 " numbers[0] = 3.14;" 2406 " numbers[0] = 3.14;"
2407 " return numbers;" 2407 " return numbers;"
2408 "};" 2408 "};"
2409 "f(); f(); f();" 2409 "f(); f(); f();"
2410 "%OptimizeFunctionOnNextCall(f);" 2410 "%OptimizeFunctionOnNextCall(f);"
2411 "f();"); 2411 "f();");
2412 CHECK_EQ(static_cast<int>(3.14), 2412 CHECK_EQ(static_cast<int>(3.14),
2413 v8::Object::Cast(*res)->Get(v8_str("0"))->Int32Value()); 2413 v8::Object::Cast(*res)->Get(v8_str("0"))->Int32Value());
2414 2414
2415 Handle<JSObject> o = 2415 Handle<JSObject> o =
2416 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res)); 2416 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
2417 2417
2418 CHECK(HEAP->InNewSpace(o->elements())); 2418 CHECK(HEAP->InNewSpace(o->elements()));
2419 } 2419 }
2420 2420
2421 2421
2422 TEST(OptimizedPretenuringCallNew) { 2422 TEST(OptimizedPretenuringCallNew) {
2423 i::FLAG_allow_natives_syntax = true; 2423 i::FLAG_allow_natives_syntax = true;
2424 i::FLAG_pretenuring_call_new = true; 2424 i::FLAG_pretenuring_call_new = true;
2425 CcTest::InitializeVM(); 2425 CcTest::InitializeVM();
2426 if (!i::Isolate::Current()->use_crankshaft() || i::FLAG_always_opt) return; 2426 if (!CcTest::i_isolate()->use_crankshaft() || i::FLAG_always_opt) return;
2427 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return; 2427 if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
2428 v8::HandleScope scope(CcTest::isolate()); 2428 v8::HandleScope scope(CcTest::isolate());
2429 HEAP->SetNewSpaceHighPromotionModeActive(true); 2429 HEAP->SetNewSpaceHighPromotionModeActive(true);
2430 2430
2431 AlwaysAllocateScope always_allocate; 2431 AlwaysAllocateScope always_allocate;
2432 v8::Local<v8::Value> res = CompileRun( 2432 v8::Local<v8::Value> res = CompileRun(
2433 "function g() { this.a = 0; }" 2433 "function g() { this.a = 0; }"
2434 "function f() {" 2434 "function f() {"
2435 " return new g();" 2435 " return new g();"
2436 "};" 2436 "};"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
2573 CHECK(root->map()->IsMap()); 2573 CHECK(root->map()->IsMap());
2574 } 2574 }
2575 2575
2576 2576
2577 TEST(ReleaseOverReservedPages) { 2577 TEST(ReleaseOverReservedPages) {
2578 i::FLAG_trace_gc = true; 2578 i::FLAG_trace_gc = true;
2579 // The optimizer can allocate stuff, messing up the test. 2579 // The optimizer can allocate stuff, messing up the test.
2580 i::FLAG_crankshaft = false; 2580 i::FLAG_crankshaft = false;
2581 i::FLAG_always_opt = false; 2581 i::FLAG_always_opt = false;
2582 CcTest::InitializeVM(); 2582 CcTest::InitializeVM();
2583 Isolate* isolate = Isolate::Current(); 2583 Isolate* isolate = CcTest::i_isolate();
2584 Factory* factory = isolate->factory(); 2584 Factory* factory = isolate->factory();
2585 v8::HandleScope scope(CcTest::isolate()); 2585 v8::HandleScope scope(CcTest::isolate());
2586 static const int number_of_test_pages = 20; 2586 static const int number_of_test_pages = 20;
2587 2587
2588 // Prepare many pages with low live-bytes count. 2588 // Prepare many pages with low live-bytes count.
2589 PagedSpace* old_pointer_space = HEAP->old_pointer_space(); 2589 PagedSpace* old_pointer_space = HEAP->old_pointer_space();
2590 CHECK_EQ(1, old_pointer_space->CountTotalPages()); 2590 CHECK_EQ(1, old_pointer_space->CountTotalPages());
2591 for (int i = 0; i < number_of_test_pages; i++) { 2591 for (int i = 0; i < number_of_test_pages; i++) {
2592 AlwaysAllocateScope always_allocate; 2592 AlwaysAllocateScope always_allocate;
2593 SimulateFullSpace(old_pointer_space); 2593 SimulateFullSpace(old_pointer_space);
(...skipping 21 matching lines...) Expand all
2615 // boots, but if the 20 small arrays don't fit on the first page then that's 2615 // boots, but if the 20 small arrays don't fit on the first page then that's
2616 // an indication that it is too small. 2616 // an indication that it is too small.
2617 HEAP->CollectAllAvailableGarbage("triggered really hard"); 2617 HEAP->CollectAllAvailableGarbage("triggered really hard");
2618 CHECK_EQ(1, old_pointer_space->CountTotalPages()); 2618 CHECK_EQ(1, old_pointer_space->CountTotalPages());
2619 } 2619 }
2620 2620
2621 2621
2622 TEST(Regress2237) { 2622 TEST(Regress2237) {
2623 i::FLAG_stress_compaction = false; 2623 i::FLAG_stress_compaction = false;
2624 CcTest::InitializeVM(); 2624 CcTest::InitializeVM();
2625 Isolate* isolate = Isolate::Current(); 2625 Isolate* isolate = CcTest::i_isolate();
2626 Factory* factory = isolate->factory(); 2626 Factory* factory = isolate->factory();
2627 v8::HandleScope scope(CcTest::isolate()); 2627 v8::HandleScope scope(CcTest::isolate());
2628 Handle<String> slice(HEAP->empty_string()); 2628 Handle<String> slice(HEAP->empty_string());
2629 2629
2630 { 2630 {
2631 // Generate a parent that lives in new-space. 2631 // Generate a parent that lives in new-space.
2632 v8::HandleScope inner_scope(CcTest::isolate()); 2632 v8::HandleScope inner_scope(CcTest::isolate());
2633 const char* c = "This text is long enough to trigger sliced strings."; 2633 const char* c = "This text is long enough to trigger sliced strings.";
2634 Handle<String> s = factory->NewStringFromAscii(CStrVector(c)); 2634 Handle<String> s = factory->NewStringFromAscii(CStrVector(c));
2635 CHECK(s->IsSeqOneByteString()); 2635 CHECK(s->IsSeqOneByteString());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2668 } 2668 }
2669 #endif // OBJECT_PRINT 2669 #endif // OBJECT_PRINT
2670 2670
2671 2671
2672 TEST(Regress2211) { 2672 TEST(Regress2211) {
2673 CcTest::InitializeVM(); 2673 CcTest::InitializeVM();
2674 v8::HandleScope scope(CcTest::isolate()); 2674 v8::HandleScope scope(CcTest::isolate());
2675 2675
2676 v8::Handle<v8::String> value = v8_str("val string"); 2676 v8::Handle<v8::String> value = v8_str("val string");
2677 Smi* hash = Smi::FromInt(321); 2677 Smi* hash = Smi::FromInt(321);
2678 Heap* heap = Isolate::Current()->heap(); 2678 Heap* heap = CcTest::i_isolate()->heap();
2679 2679
2680 for (int i = 0; i < 2; i++) { 2680 for (int i = 0; i < 2; i++) {
2681 // Store identity hash first and common hidden property second. 2681 // Store identity hash first and common hidden property second.
2682 v8::Handle<v8::Object> obj = v8::Object::New(); 2682 v8::Handle<v8::Object> obj = v8::Object::New();
2683 Handle<JSObject> internal_obj = v8::Utils::OpenHandle(*obj); 2683 Handle<JSObject> internal_obj = v8::Utils::OpenHandle(*obj);
2684 CHECK(internal_obj->HasFastProperties()); 2684 CHECK(internal_obj->HasFastProperties());
2685 2685
2686 // In the first iteration, set hidden value first and identity hash second. 2686 // In the first iteration, set hidden value first and identity hash second.
2687 // In the second iteration, reverse the order. 2687 // In the second iteration, reverse the order.
2688 if (i == 0) obj->SetHiddenValue(v8_str("key string"), value); 2688 if (i == 0) obj->SetHiddenValue(v8_str("key string"), value);
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
2953 ReleaseStackTraceDataTest(source1, getter); 2953 ReleaseStackTraceDataTest(source1, getter);
2954 ReleaseStackTraceDataTest(source2, getter); 2954 ReleaseStackTraceDataTest(source2, getter);
2955 ReleaseStackTraceDataTest(source3, getter); 2955 ReleaseStackTraceDataTest(source3, getter);
2956 ReleaseStackTraceDataTest(source4, getter); 2956 ReleaseStackTraceDataTest(source4, getter);
2957 } 2957 }
2958 2958
2959 2959
2960 TEST(Regression144230) { 2960 TEST(Regression144230) {
2961 i::FLAG_stress_compaction = false; 2961 i::FLAG_stress_compaction = false;
2962 CcTest::InitializeVM(); 2962 CcTest::InitializeVM();
2963 Isolate* isolate = Isolate::Current(); 2963 Isolate* isolate = CcTest::i_isolate();
2964 Heap* heap = isolate->heap(); 2964 Heap* heap = isolate->heap();
2965 HandleScope scope(isolate); 2965 HandleScope scope(isolate);
2966 2966
2967 // First make sure that the uninitialized CallIC stub is on a single page 2967 // First make sure that the uninitialized CallIC stub is on a single page
2968 // that will later be selected as an evacuation candidate. 2968 // that will later be selected as an evacuation candidate.
2969 { 2969 {
2970 HandleScope inner_scope(isolate); 2970 HandleScope inner_scope(isolate);
2971 AlwaysAllocateScope always_allocate; 2971 AlwaysAllocateScope always_allocate;
2972 SimulateFullSpace(heap->code_space()); 2972 SimulateFullSpace(heap->code_space());
2973 isolate->stub_cache()->ComputeCallInitialize(9, RelocInfo::CODE_TARGET); 2973 isolate->stub_cache()->ComputeCallInitialize(9, RelocInfo::CODE_TARGET);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3017 // the CallIC is executed the next time. 3017 // the CallIC is executed the next time.
3018 JSReceiver::SetProperty(global, name, call_function, NONE, kNonStrictMode); 3018 JSReceiver::SetProperty(global, name, call_function, NONE, kNonStrictMode);
3019 CompileRun("call();"); 3019 CompileRun("call();");
3020 } 3020 }
3021 3021
3022 3022
3023 TEST(Regress159140) { 3023 TEST(Regress159140) {
3024 i::FLAG_allow_natives_syntax = true; 3024 i::FLAG_allow_natives_syntax = true;
3025 i::FLAG_flush_code_incrementally = true; 3025 i::FLAG_flush_code_incrementally = true;
3026 CcTest::InitializeVM(); 3026 CcTest::InitializeVM();
3027 Isolate* isolate = Isolate::Current(); 3027 Isolate* isolate = CcTest::i_isolate();
3028 Heap* heap = isolate->heap(); 3028 Heap* heap = isolate->heap();
3029 HandleScope scope(isolate); 3029 HandleScope scope(isolate);
3030 3030
3031 // Perform one initial GC to enable code flushing. 3031 // Perform one initial GC to enable code flushing.
3032 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 3032 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3033 3033
3034 // Prepare several closures that are all eligible for code flushing 3034 // Prepare several closures that are all eligible for code flushing
3035 // because all reachable ones are not optimized. Make sure that the 3035 // because all reachable ones are not optimized. Make sure that the
3036 // optimized code object is directly reachable through a handle so 3036 // optimized code object is directly reachable through a handle so
3037 // that it is marked black during incremental marking. 3037 // that it is marked black during incremental marking.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3079 3079
3080 // Unoptimized code is missing and the deoptimizer will go ballistic. 3080 // Unoptimized code is missing and the deoptimizer will go ballistic.
3081 CompileRun("g('bozo');"); 3081 CompileRun("g('bozo');");
3082 } 3082 }
3083 3083
3084 3084
3085 TEST(Regress165495) { 3085 TEST(Regress165495) {
3086 i::FLAG_allow_natives_syntax = true; 3086 i::FLAG_allow_natives_syntax = true;
3087 i::FLAG_flush_code_incrementally = true; 3087 i::FLAG_flush_code_incrementally = true;
3088 CcTest::InitializeVM(); 3088 CcTest::InitializeVM();
3089 Isolate* isolate = Isolate::Current(); 3089 Isolate* isolate = CcTest::i_isolate();
3090 Heap* heap = isolate->heap(); 3090 Heap* heap = isolate->heap();
3091 HandleScope scope(isolate); 3091 HandleScope scope(isolate);
3092 3092
3093 // Perform one initial GC to enable code flushing. 3093 // Perform one initial GC to enable code flushing.
3094 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 3094 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3095 3095
3096 // Prepare an optimized closure that the optimized code map will get 3096 // Prepare an optimized closure that the optimized code map will get
3097 // populated. Then age the unoptimized code to trigger code flushing 3097 // populated. Then age the unoptimized code to trigger code flushing
3098 // but make sure the optimized code is unreachable. 3098 // but make sure the optimized code is unreachable.
3099 { 3099 {
(...skipping 28 matching lines...) Expand all
3128 CompileRun("var g = mkClosure(); g('bozo');"); 3128 CompileRun("var g = mkClosure(); g('bozo');");
3129 } 3129 }
3130 3130
3131 3131
3132 TEST(Regress169209) { 3132 TEST(Regress169209) {
3133 i::FLAG_stress_compaction = false; 3133 i::FLAG_stress_compaction = false;
3134 i::FLAG_allow_natives_syntax = true; 3134 i::FLAG_allow_natives_syntax = true;
3135 i::FLAG_flush_code_incrementally = true; 3135 i::FLAG_flush_code_incrementally = true;
3136 3136
3137 CcTest::InitializeVM(); 3137 CcTest::InitializeVM();
3138 Isolate* isolate = Isolate::Current(); 3138 Isolate* isolate = CcTest::i_isolate();
3139 Heap* heap = isolate->heap(); 3139 Heap* heap = isolate->heap();
3140 HandleScope scope(isolate); 3140 HandleScope scope(isolate);
3141 3141
3142 // Perform one initial GC to enable code flushing. 3142 // Perform one initial GC to enable code flushing.
3143 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 3143 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3144 3144
3145 // Prepare a shared function info eligible for code flushing for which 3145 // Prepare a shared function info eligible for code flushing for which
3146 // the unoptimized code will be replaced during optimization. 3146 // the unoptimized code will be replaced during optimization.
3147 Handle<SharedFunctionInfo> shared1; 3147 Handle<SharedFunctionInfo> shared1;
3148 { 3148 {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
3214 v8::internal::MaybeObject* maybe = space->AllocateRaw(new_linear_size); 3214 v8::internal::MaybeObject* maybe = space->AllocateRaw(new_linear_size);
3215 v8::internal::FreeListNode* node = v8::internal::FreeListNode::cast(maybe); 3215 v8::internal::FreeListNode* node = v8::internal::FreeListNode::cast(maybe);
3216 node->set_size(space->heap(), new_linear_size); 3216 node->set_size(space->heap(), new_linear_size);
3217 } 3217 }
3218 3218
3219 3219
3220 TEST(Regress169928) { 3220 TEST(Regress169928) {
3221 i::FLAG_allow_natives_syntax = true; 3221 i::FLAG_allow_natives_syntax = true;
3222 i::FLAG_crankshaft = false; 3222 i::FLAG_crankshaft = false;
3223 CcTest::InitializeVM(); 3223 CcTest::InitializeVM();
3224 Isolate* isolate = Isolate::Current(); 3224 Isolate* isolate = CcTest::i_isolate();
3225 Factory* factory = isolate->factory(); 3225 Factory* factory = isolate->factory();
3226 v8::HandleScope scope(CcTest::isolate()); 3226 v8::HandleScope scope(CcTest::isolate());
3227 3227
3228 // Some flags turn Scavenge collections into Mark-sweep collections 3228 // Some flags turn Scavenge collections into Mark-sweep collections
3229 // and hence are incompatible with this test case. 3229 // and hence are incompatible with this test case.
3230 if (FLAG_gc_global || FLAG_stress_compaction) return; 3230 if (FLAG_gc_global || FLAG_stress_compaction) return;
3231 3231
3232 // Prepare the environment 3232 // Prepare the environment
3233 CompileRun("function fastliteralcase(literal, value) {" 3233 CompileRun("function fastliteralcase(literal, value) {"
3234 " literal[0] = value;" 3234 " literal[0] = value;"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
3289 v8::Script::Compile(mote_code_string)->Run(); 3289 v8::Script::Compile(mote_code_string)->Run();
3290 } 3290 }
3291 3291
3292 3292
3293 TEST(Regress168801) { 3293 TEST(Regress168801) {
3294 i::FLAG_always_compact = true; 3294 i::FLAG_always_compact = true;
3295 i::FLAG_cache_optimized_code = false; 3295 i::FLAG_cache_optimized_code = false;
3296 i::FLAG_allow_natives_syntax = true; 3296 i::FLAG_allow_natives_syntax = true;
3297 i::FLAG_flush_code_incrementally = true; 3297 i::FLAG_flush_code_incrementally = true;
3298 CcTest::InitializeVM(); 3298 CcTest::InitializeVM();
3299 Isolate* isolate = Isolate::Current(); 3299 Isolate* isolate = CcTest::i_isolate();
3300 Heap* heap = isolate->heap(); 3300 Heap* heap = isolate->heap();
3301 HandleScope scope(isolate); 3301 HandleScope scope(isolate);
3302 3302
3303 // Perform one initial GC to enable code flushing. 3303 // Perform one initial GC to enable code flushing.
3304 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 3304 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3305 3305
3306 // Ensure the code ends up on an evacuation candidate. 3306 // Ensure the code ends up on an evacuation candidate.
3307 SimulateFullSpace(heap->code_space()); 3307 SimulateFullSpace(heap->code_space());
3308 3308
3309 // Prepare an unoptimized function that is eligible for code flushing. 3309 // Prepare an unoptimized function that is eligible for code flushing.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
3345 heap->CollectAllGarbage(Heap::kNoGCFlags); 3345 heap->CollectAllGarbage(Heap::kNoGCFlags);
3346 } 3346 }
3347 3347
3348 3348
3349 TEST(Regress173458) { 3349 TEST(Regress173458) {
3350 i::FLAG_always_compact = true; 3350 i::FLAG_always_compact = true;
3351 i::FLAG_cache_optimized_code = false; 3351 i::FLAG_cache_optimized_code = false;
3352 i::FLAG_allow_natives_syntax = true; 3352 i::FLAG_allow_natives_syntax = true;
3353 i::FLAG_flush_code_incrementally = true; 3353 i::FLAG_flush_code_incrementally = true;
3354 CcTest::InitializeVM(); 3354 CcTest::InitializeVM();
3355 Isolate* isolate = Isolate::Current(); 3355 Isolate* isolate = CcTest::i_isolate();
3356 Heap* heap = isolate->heap(); 3356 Heap* heap = isolate->heap();
3357 HandleScope scope(isolate); 3357 HandleScope scope(isolate);
3358 3358
3359 // Perform one initial GC to enable code flushing. 3359 // Perform one initial GC to enable code flushing.
3360 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 3360 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
3361 3361
3362 // Ensure the code ends up on an evacuation candidate. 3362 // Ensure the code ends up on an evacuation candidate.
3363 SimulateFullSpace(heap->code_space()); 3363 SimulateFullSpace(heap->code_space());
3364 3364
3365 // Prepare an unoptimized function that is eligible for code flushing. 3365 // Prepare an unoptimized function that is eligible for code flushing.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3402 3402
3403 3403
3404 class DummyVisitor : public ObjectVisitor { 3404 class DummyVisitor : public ObjectVisitor {
3405 public: 3405 public:
3406 void VisitPointers(Object** start, Object** end) { } 3406 void VisitPointers(Object** start, Object** end) { }
3407 }; 3407 };
3408 3408
3409 3409
3410 TEST(DeferredHandles) { 3410 TEST(DeferredHandles) {
3411 CcTest::InitializeVM(); 3411 CcTest::InitializeVM();
3412 Isolate* isolate = Isolate::Current(); 3412 Isolate* isolate = CcTest::i_isolate();
3413 Heap* heap = isolate->heap(); 3413 Heap* heap = isolate->heap();
3414 v8::HandleScope scope(reinterpret_cast<v8::Isolate*>(isolate)); 3414 v8::HandleScope scope(reinterpret_cast<v8::Isolate*>(isolate));
3415 v8::ImplementationUtilities::HandleScopeData* data = 3415 v8::ImplementationUtilities::HandleScopeData* data =
3416 isolate->handle_scope_data(); 3416 isolate->handle_scope_data();
3417 Handle<Object> init(heap->empty_string(), isolate); 3417 Handle<Object> init(heap->empty_string(), isolate);
3418 while (data->next < data->limit) { 3418 while (data->next < data->limit) {
3419 Handle<Object> obj(heap->empty_string(), isolate); 3419 Handle<Object> obj(heap->empty_string(), isolate);
3420 } 3420 }
3421 // An entire block of handles has been filled. 3421 // An entire block of handles has been filled.
3422 // Next handle would require a new block. 3422 // Next handle would require a new block.
(...skipping 13 matching lines...) Expand all
3436 " var a = new Array(n);" 3436 " var a = new Array(n);"
3437 " for (var i = 0; i < n; i += 100) a[i] = i;" 3437 " for (var i = 0; i < n; i += 100) a[i] = i;"
3438 "};" 3438 "};"
3439 "f(10 * 1024 * 1024);"); 3439 "f(10 * 1024 * 1024);");
3440 IncrementalMarking* marking = HEAP->incremental_marking(); 3440 IncrementalMarking* marking = HEAP->incremental_marking();
3441 if (marking->IsStopped()) marking->Start(); 3441 if (marking->IsStopped()) marking->Start();
3442 // This big step should be sufficient to mark the whole array. 3442 // This big step should be sufficient to mark the whole array.
3443 marking->Step(100 * MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD); 3443 marking->Step(100 * MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD);
3444 ASSERT(marking->IsComplete()); 3444 ASSERT(marking->IsComplete());
3445 } 3445 }
OLDNEW
« no previous file with comments | « test/cctest/test-hashing.cc ('k') | test/cctest/test-heap-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698