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

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

Issue 1135243004: [es6] Support super.property in eval and arrow functions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: cleanup Created 5 years, 7 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
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 3339 matching lines...) Expand 10 before | Expand all | Expand 10 after
3350 CcTest::global()->Set(v8_str("fun2"), fun2); 3350 CcTest::global()->Set(v8_str("fun2"), fun2);
3351 CompileRun("function f(a, b) { a(); b(); } f(fun1, fun2);"); 3351 CompileRun("function f(a, b) { a(); b(); } f(fun1, fun2);");
3352 3352
3353 Handle<JSFunction> f = 3353 Handle<JSFunction> f =
3354 v8::Utils::OpenHandle( 3354 v8::Utils::OpenHandle(
3355 *v8::Handle<v8::Function>::Cast( 3355 *v8::Handle<v8::Function>::Cast(
3356 CcTest::global()->Get(v8_str("f")))); 3356 CcTest::global()->Get(v8_str("f"))));
3357 3357
3358 Handle<TypeFeedbackVector> feedback_vector(f->shared()->feedback_vector()); 3358 Handle<TypeFeedbackVector> feedback_vector(f->shared()->feedback_vector());
3359 3359
3360 int expected_slots = 2; 3360 int expected_slots = 3;
3361 CHECK_EQ(expected_slots, feedback_vector->ICSlots()); 3361 CHECK_EQ(expected_slots, feedback_vector->ICSlots());
3362 int slot1 = 0; 3362 int slot1 = 1;
3363 int slot2 = 1; 3363 int slot2 = 2;
3364 CHECK(feedback_vector->Get(FeedbackVectorICSlot(slot1))->IsWeakCell()); 3364 CHECK(feedback_vector->Get(FeedbackVectorICSlot(slot1))->IsWeakCell());
3365 CHECK(feedback_vector->Get(FeedbackVectorICSlot(slot2))->IsWeakCell()); 3365 CHECK(feedback_vector->Get(FeedbackVectorICSlot(slot2))->IsWeakCell());
3366 3366
3367 SimulateIncrementalMarking(CcTest::heap()); 3367 SimulateIncrementalMarking(CcTest::heap());
3368 CcTest::heap()->CollectAllGarbage(); 3368 CcTest::heap()->CollectAllGarbage();
3369 3369
3370 CHECK(!WeakCell::cast(feedback_vector->Get(FeedbackVectorICSlot(slot1))) 3370 CHECK(!WeakCell::cast(feedback_vector->Get(FeedbackVectorICSlot(slot1)))
3371 ->cleared()); 3371 ->cleared());
3372 CHECK(!WeakCell::cast(feedback_vector->Get(FeedbackVectorICSlot(slot2))) 3372 CHECK(!WeakCell::cast(feedback_vector->Get(FeedbackVectorICSlot(slot2)))
3373 ->cleared()); 3373 ->cleared());
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
3476 // Prepare function f that contains a monomorphic IC for object 3476 // Prepare function f that contains a monomorphic IC for object
3477 // originating from the same native context. 3477 // originating from the same native context.
3478 CompileRun("function fun() { this.x = 1; }; var obj = new fun();" 3478 CompileRun("function fun() { this.x = 1; }; var obj = new fun();"
3479 "function f(o) { return o.x; } f(obj); f(obj);"); 3479 "function f(o) { return o.x; } f(obj); f(obj);");
3480 Handle<JSFunction> f = 3480 Handle<JSFunction> f =
3481 v8::Utils::OpenHandle( 3481 v8::Utils::OpenHandle(
3482 *v8::Handle<v8::Function>::Cast( 3482 *v8::Handle<v8::Function>::Cast(
3483 CcTest::global()->Get(v8_str("f")))); 3483 CcTest::global()->Get(v8_str("f"))));
3484 3484
3485 Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC); 3485 Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC);
3486 CheckVectorIC(f, 0, MONOMORPHIC); 3486 CheckVectorIC(f, 1, MONOMORPHIC);
3487 CHECK(ic_before->ic_state() == DEFAULT); 3487 CHECK(ic_before->ic_state() == DEFAULT);
3488 3488
3489 SimulateIncrementalMarking(CcTest::heap()); 3489 SimulateIncrementalMarking(CcTest::heap());
3490 CcTest::heap()->CollectAllGarbage(); 3490 CcTest::heap()->CollectAllGarbage();
3491 3491
3492 Code* ic_after = FindFirstIC(f->shared()->code(), Code::LOAD_IC); 3492 Code* ic_after = FindFirstIC(f->shared()->code(), Code::LOAD_IC);
3493 CheckVectorIC(f, 0, MONOMORPHIC); 3493 CheckVectorIC(f, 1, MONOMORPHIC);
3494 CHECK(ic_after->ic_state() == DEFAULT); 3494 CHECK(ic_after->ic_state() == DEFAULT);
3495 } 3495 }
3496 3496
3497 3497
3498 TEST(IncrementalMarkingClearsMonomorphicIC) { 3498 TEST(IncrementalMarkingClearsMonomorphicIC) {
3499 if (i::FLAG_always_opt) return; 3499 if (i::FLAG_always_opt) return;
3500 CcTest::InitializeVM(); 3500 CcTest::InitializeVM();
3501 v8::HandleScope scope(CcTest::isolate()); 3501 v8::HandleScope scope(CcTest::isolate());
3502 v8::Local<v8::Value> obj1; 3502 v8::Local<v8::Value> obj1;
3503 3503
3504 { 3504 {
3505 LocalContext env; 3505 LocalContext env;
3506 CompileRun("function fun() { this.x = 1; }; var obj = new fun();"); 3506 CompileRun("function fun() { this.x = 1; }; var obj = new fun();");
3507 obj1 = env->Global()->Get(v8_str("obj")); 3507 obj1 = env->Global()->Get(v8_str("obj"));
3508 } 3508 }
3509 3509
3510 // Prepare function f that contains a monomorphic IC for object 3510 // Prepare function f that contains a monomorphic IC for object
3511 // originating from a different native context. 3511 // originating from a different native context.
3512 CcTest::global()->Set(v8_str("obj1"), obj1); 3512 CcTest::global()->Set(v8_str("obj1"), obj1);
3513 CompileRun("function f(o) { return o.x; } f(obj1); f(obj1);"); 3513 CompileRun("function f(o) { return o.x; } f(obj1); f(obj1);");
3514 Handle<JSFunction> f = v8::Utils::OpenHandle( 3514 Handle<JSFunction> f = v8::Utils::OpenHandle(
3515 *v8::Handle<v8::Function>::Cast(CcTest::global()->Get(v8_str("f")))); 3515 *v8::Handle<v8::Function>::Cast(CcTest::global()->Get(v8_str("f"))));
3516 3516
3517 Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC); 3517 Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC);
3518 CheckVectorIC(f, 0, MONOMORPHIC); 3518 CheckVectorIC(f, 1, MONOMORPHIC);
3519 CHECK(ic_before->ic_state() == DEFAULT); 3519 CHECK(ic_before->ic_state() == DEFAULT);
3520 3520
3521 // Fire context dispose notification. 3521 // Fire context dispose notification.
3522 CcTest::isolate()->ContextDisposedNotification(); 3522 CcTest::isolate()->ContextDisposedNotification();
3523 SimulateIncrementalMarking(CcTest::heap()); 3523 SimulateIncrementalMarking(CcTest::heap());
3524 CcTest::heap()->CollectAllGarbage(); 3524 CcTest::heap()->CollectAllGarbage();
3525 3525
3526 Code* ic_after = FindFirstIC(f->shared()->code(), Code::LOAD_IC); 3526 Code* ic_after = FindFirstIC(f->shared()->code(), Code::LOAD_IC);
3527 CheckVectorICCleared(f, 0); 3527 CheckVectorICCleared(f, 1);
3528 CHECK(ic_after->ic_state() == DEFAULT); 3528 CHECK(ic_after->ic_state() == DEFAULT);
3529 } 3529 }
3530 3530
3531 3531
3532 TEST(IncrementalMarkingPreservesPolymorphicIC) { 3532 TEST(IncrementalMarkingPreservesPolymorphicIC) {
3533 if (i::FLAG_always_opt) return; 3533 if (i::FLAG_always_opt) return;
3534 CcTest::InitializeVM(); 3534 CcTest::InitializeVM();
3535 v8::HandleScope scope(CcTest::isolate()); 3535 v8::HandleScope scope(CcTest::isolate());
3536 v8::Local<v8::Value> obj1, obj2; 3536 v8::Local<v8::Value> obj1, obj2;
3537 3537
(...skipping 11 matching lines...) Expand all
3549 3549
3550 // Prepare function f that contains a polymorphic IC for objects 3550 // Prepare function f that contains a polymorphic IC for objects
3551 // originating from two different native contexts. 3551 // originating from two different native contexts.
3552 CcTest::global()->Set(v8_str("obj1"), obj1); 3552 CcTest::global()->Set(v8_str("obj1"), obj1);
3553 CcTest::global()->Set(v8_str("obj2"), obj2); 3553 CcTest::global()->Set(v8_str("obj2"), obj2);
3554 CompileRun("function f(o) { return o.x; } f(obj1); f(obj1); f(obj2);"); 3554 CompileRun("function f(o) { return o.x; } f(obj1); f(obj1); f(obj2);");
3555 Handle<JSFunction> f = v8::Utils::OpenHandle( 3555 Handle<JSFunction> f = v8::Utils::OpenHandle(
3556 *v8::Handle<v8::Function>::Cast(CcTest::global()->Get(v8_str("f")))); 3556 *v8::Handle<v8::Function>::Cast(CcTest::global()->Get(v8_str("f"))));
3557 3557
3558 Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC); 3558 Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC);
3559 CheckVectorIC(f, 0, POLYMORPHIC); 3559 CheckVectorIC(f, 1, POLYMORPHIC);
3560 CHECK(ic_before->ic_state() == DEFAULT); 3560 CHECK(ic_before->ic_state() == DEFAULT);
3561 3561
3562 // Fire context dispose notification. 3562 // Fire context dispose notification.
3563 SimulateIncrementalMarking(CcTest::heap()); 3563 SimulateIncrementalMarking(CcTest::heap());
3564 CcTest::heap()->CollectAllGarbage(); 3564 CcTest::heap()->CollectAllGarbage();
3565 3565
3566 Code* ic_after = FindFirstIC(f->shared()->code(), Code::LOAD_IC); 3566 Code* ic_after = FindFirstIC(f->shared()->code(), Code::LOAD_IC);
3567 CheckVectorIC(f, 0, POLYMORPHIC); 3567 CheckVectorIC(f, 1, POLYMORPHIC);
3568 CHECK(ic_after->ic_state() == DEFAULT); 3568 CHECK(ic_after->ic_state() == DEFAULT);
3569 } 3569 }
3570 3570
3571 3571
3572 TEST(IncrementalMarkingClearsPolymorphicIC) { 3572 TEST(IncrementalMarkingClearsPolymorphicIC) {
3573 if (i::FLAG_always_opt) return; 3573 if (i::FLAG_always_opt) return;
3574 CcTest::InitializeVM(); 3574 CcTest::InitializeVM();
3575 v8::HandleScope scope(CcTest::isolate()); 3575 v8::HandleScope scope(CcTest::isolate());
3576 v8::Local<v8::Value> obj1, obj2; 3576 v8::Local<v8::Value> obj1, obj2;
3577 3577
(...skipping 11 matching lines...) Expand all
3589 3589
3590 // Prepare function f that contains a polymorphic IC for objects 3590 // Prepare function f that contains a polymorphic IC for objects
3591 // originating from two different native contexts. 3591 // originating from two different native contexts.
3592 CcTest::global()->Set(v8_str("obj1"), obj1); 3592 CcTest::global()->Set(v8_str("obj1"), obj1);
3593 CcTest::global()->Set(v8_str("obj2"), obj2); 3593 CcTest::global()->Set(v8_str("obj2"), obj2);
3594 CompileRun("function f(o) { return o.x; } f(obj1); f(obj1); f(obj2);"); 3594 CompileRun("function f(o) { return o.x; } f(obj1); f(obj1); f(obj2);");
3595 Handle<JSFunction> f = v8::Utils::OpenHandle( 3595 Handle<JSFunction> f = v8::Utils::OpenHandle(
3596 *v8::Handle<v8::Function>::Cast(CcTest::global()->Get(v8_str("f")))); 3596 *v8::Handle<v8::Function>::Cast(CcTest::global()->Get(v8_str("f"))));
3597 3597
3598 Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC); 3598 Code* ic_before = FindFirstIC(f->shared()->code(), Code::LOAD_IC);
3599 CheckVectorIC(f, 0, POLYMORPHIC); 3599 CheckVectorIC(f, 1, POLYMORPHIC);
3600 CHECK(ic_before->ic_state() == DEFAULT); 3600 CHECK(ic_before->ic_state() == DEFAULT);
3601 3601
3602 // Fire context dispose notification. 3602 // Fire context dispose notification.
3603 CcTest::isolate()->ContextDisposedNotification(); 3603 CcTest::isolate()->ContextDisposedNotification();
3604 SimulateIncrementalMarking(CcTest::heap()); 3604 SimulateIncrementalMarking(CcTest::heap());
3605 CcTest::heap()->CollectAllGarbage(); 3605 CcTest::heap()->CollectAllGarbage();
3606 3606
3607 CheckVectorICCleared(f, 0); 3607 CheckVectorICCleared(f, 1);
3608 CHECK(ic_before->ic_state() == DEFAULT); 3608 CHECK(ic_before->ic_state() == DEFAULT);
3609 } 3609 }
3610 3610
3611 3611
3612 class SourceResource : public v8::String::ExternalOneByteStringResource { 3612 class SourceResource : public v8::String::ExternalOneByteStringResource {
3613 public: 3613 public:
3614 explicit SourceResource(const char* data) 3614 explicit SourceResource(const char* data)
3615 : data_(data), length_(strlen(data)) { } 3615 : data_(data), length_(strlen(data)) { }
3616 3616
3617 virtual void Dispose() { 3617 virtual void Dispose() {
(...skipping 1130 matching lines...) Expand 10 before | Expand all | Expand 10 after
4748 " loadIC(obj);" 4748 " loadIC(obj);"
4749 " loadIC(obj);" 4749 " loadIC(obj);"
4750 " return proto;" 4750 " return proto;"
4751 "};"); 4751 "};");
4752 Handle<JSFunction> loadIC = GetFunctionByName(isolate, "loadIC"); 4752 Handle<JSFunction> loadIC = GetFunctionByName(isolate, "loadIC");
4753 { 4753 {
4754 v8::HandleScope scope(CcTest::isolate()); 4754 v8::HandleScope scope(CcTest::isolate());
4755 CompileRun("(testIC())"); 4755 CompileRun("(testIC())");
4756 } 4756 }
4757 heap->CollectAllGarbage(); 4757 heap->CollectAllGarbage();
4758 CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 0, MONOMORPHIC); 4758 CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 1, MONOMORPHIC);
4759 { 4759 {
4760 v8::HandleScope scope(CcTest::isolate()); 4760 v8::HandleScope scope(CcTest::isolate());
4761 CompileRun("(testIC())"); 4761 CompileRun("(testIC())");
4762 } 4762 }
4763 CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 0, MONOMORPHIC); 4763 CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 1, MONOMORPHIC);
4764 } 4764 }
4765 4765
4766 4766
4767 TEST(PolymorphicStaysPolymorphicAfterGC) { 4767 TEST(PolymorphicStaysPolymorphicAfterGC) {
4768 if (FLAG_always_opt) return; 4768 if (FLAG_always_opt) return;
4769 CcTest::InitializeVM(); 4769 CcTest::InitializeVM();
4770 Isolate* isolate = CcTest::i_isolate(); 4770 Isolate* isolate = CcTest::i_isolate();
4771 Heap* heap = isolate->heap(); 4771 Heap* heap = isolate->heap();
4772 v8::HandleScope scope(CcTest::isolate()); 4772 v8::HandleScope scope(CcTest::isolate());
4773 CompileRun( 4773 CompileRun(
(...skipping 10 matching lines...) Expand all
4784 " poly.x = true;" 4784 " poly.x = true;"
4785 " loadIC(poly);" 4785 " loadIC(poly);"
4786 " return proto;" 4786 " return proto;"
4787 "};"); 4787 "};");
4788 Handle<JSFunction> loadIC = GetFunctionByName(isolate, "loadIC"); 4788 Handle<JSFunction> loadIC = GetFunctionByName(isolate, "loadIC");
4789 { 4789 {
4790 v8::HandleScope scope(CcTest::isolate()); 4790 v8::HandleScope scope(CcTest::isolate());
4791 CompileRun("(testIC())"); 4791 CompileRun("(testIC())");
4792 } 4792 }
4793 heap->CollectAllGarbage(); 4793 heap->CollectAllGarbage();
4794 CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 0, POLYMORPHIC); 4794 CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 1, POLYMORPHIC);
4795 { 4795 {
4796 v8::HandleScope scope(CcTest::isolate()); 4796 v8::HandleScope scope(CcTest::isolate());
4797 CompileRun("(testIC())"); 4797 CompileRun("(testIC())");
4798 } 4798 }
4799 CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 0, POLYMORPHIC); 4799 CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 1, POLYMORPHIC);
4800 } 4800 }
4801 4801
4802 4802
4803 TEST(WeakCell) { 4803 TEST(WeakCell) {
4804 CcTest::InitializeVM(); 4804 CcTest::InitializeVM();
4805 Isolate* isolate = CcTest::i_isolate(); 4805 Isolate* isolate = CcTest::i_isolate();
4806 v8::internal::Heap* heap = CcTest::heap(); 4806 v8::internal::Heap* heap = CcTest::heap();
4807 v8::internal::Factory* factory = isolate->factory(); 4807 v8::internal::Factory* factory = isolate->factory();
4808 4808
4809 HandleScope outer_scope(isolate); 4809 HandleScope outer_scope(isolate);
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
5454 shared.SetWeak(&shared, SharedHasBeenCollected, 5454 shared.SetWeak(&shared, SharedHasBeenCollected,
5455 v8::WeakCallbackType::kParameter); 5455 v8::WeakCallbackType::kParameter);
5456 builtin_exports.SetWeak(&builtin_exports, BuiltinExportsHasBeenCollected, 5456 builtin_exports.SetWeak(&builtin_exports, BuiltinExportsHasBeenCollected,
5457 v8::WeakCallbackType::kParameter); 5457 v8::WeakCallbackType::kParameter);
5458 5458
5459 CcTest::heap()->CollectAllAvailableGarbage("fire weak callbacks"); 5459 CcTest::heap()->CollectAllAvailableGarbage("fire weak callbacks");
5460 5460
5461 CHECK(shared_has_been_collected); 5461 CHECK(shared_has_been_collected);
5462 CHECK(builtin_exports_has_been_collected); 5462 CHECK(builtin_exports_has_been_collected);
5463 } 5463 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698