OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/class_finalizer.h" | 5 #include "vm/class_finalizer.h" |
6 | 6 |
7 #include "vm/flags.h" | 7 #include "vm/flags.h" |
8 #include "vm/hash_table.h" | 8 #include "vm/hash_table.h" |
9 #include "vm/heap.h" | 9 #include "vm/heap.h" |
10 #include "vm/isolate.h" | 10 #include "vm/isolate.h" |
(...skipping 3636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3647 obj->SetClassId(new_cid); | 3647 obj->SetClassId(new_cid); |
3648 } | 3648 } |
3649 } | 3649 } |
3650 } | 3650 } |
3651 | 3651 |
3652 private: | 3652 private: |
3653 intptr_t* old_to_new_cids_; | 3653 intptr_t* old_to_new_cids_; |
3654 }; | 3654 }; |
3655 | 3655 |
3656 void ClassFinalizer::RemapClassIds(intptr_t* old_to_new_cid) { | 3656 void ClassFinalizer::RemapClassIds(intptr_t* old_to_new_cid) { |
3657 Isolate* I = Thread::Current()->isolate(); | 3657 Thread* T = Thread::Current(); |
| 3658 Isolate* I = T->isolate(); |
3658 | 3659 |
3659 // Code, ICData, allocation stubs have now-invalid cids. | 3660 // Code, ICData, allocation stubs have now-invalid cids. |
3660 ClearAllCode(); | 3661 ClearAllCode(); |
3661 | 3662 |
3662 { | 3663 { |
3663 HeapIterationScope his; | 3664 HeapIterationScope his(T); |
3664 I->set_remapping_cids(true); | 3665 I->set_remapping_cids(true); |
3665 | 3666 |
3666 // Update the class table. Do it before rewriting cids in headers, as the | 3667 // Update the class table. Do it before rewriting cids in headers, as the |
3667 // heap walkers load an object's size *after* calling the visitor. | 3668 // heap walkers load an object's size *after* calling the visitor. |
3668 I->class_table()->Remap(old_to_new_cid); | 3669 I->class_table()->Remap(old_to_new_cid); |
3669 | 3670 |
3670 // Rewrite cids in headers and cids in Classes, Fields, Types and | 3671 // Rewrite cids in headers and cids in Classes, Fields, Types and |
3671 // TypeParameters. | 3672 // TypeParameters. |
3672 { | 3673 { |
3673 CidRewriteVisitor visitor(old_to_new_cid); | 3674 CidRewriteVisitor visitor(old_to_new_cid); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3713 BoundedType& bounded_type_; | 3714 BoundedType& bounded_type_; |
3714 }; | 3715 }; |
3715 | 3716 |
3716 void ClassFinalizer::RehashTypes() { | 3717 void ClassFinalizer::RehashTypes() { |
3717 Thread* T = Thread::Current(); | 3718 Thread* T = Thread::Current(); |
3718 Zone* Z = T->zone(); | 3719 Zone* Z = T->zone(); |
3719 Isolate* I = T->isolate(); | 3720 Isolate* I = T->isolate(); |
3720 | 3721 |
3721 // Clear all cached hash values. | 3722 // Clear all cached hash values. |
3722 { | 3723 { |
3723 HeapIterationScope his; | 3724 HeapIterationScope his(T); |
3724 ClearTypeHashVisitor visitor(Z); | 3725 ClearTypeHashVisitor visitor(Z); |
3725 I->heap()->VisitObjects(&visitor); | 3726 I->heap()->VisitObjects(&visitor); |
3726 } | 3727 } |
3727 | 3728 |
3728 // Rehash the canonical Types table. | 3729 // Rehash the canonical Types table. |
3729 ObjectStore* object_store = I->object_store(); | 3730 ObjectStore* object_store = I->object_store(); |
3730 GrowableObjectArray& types = | 3731 GrowableObjectArray& types = |
3731 GrowableObjectArray::Handle(Z, GrowableObjectArray::New()); | 3732 GrowableObjectArray::Handle(Z, GrowableObjectArray::New()); |
3732 Array& types_array = Array::Handle(Z); | 3733 Array& types_array = Array::Handle(Z); |
3733 Type& type = Type::Handle(Z); | 3734 Type& type = Type::Handle(Z); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3790 ProgramVisitor::VisitFunctions(&function_visitor); | 3791 ProgramVisitor::VisitFunctions(&function_visitor); |
3791 | 3792 |
3792 class ClearCodeClassVisitor : public ClassVisitor { | 3793 class ClearCodeClassVisitor : public ClassVisitor { |
3793 void Visit(const Class& cls) { cls.DisableAllocationStub(); } | 3794 void Visit(const Class& cls) { cls.DisableAllocationStub(); } |
3794 }; | 3795 }; |
3795 ClearCodeClassVisitor class_visitor; | 3796 ClearCodeClassVisitor class_visitor; |
3796 ProgramVisitor::VisitClasses(&class_visitor); | 3797 ProgramVisitor::VisitClasses(&class_visitor); |
3797 } | 3798 } |
3798 | 3799 |
3799 } // namespace dart | 3800 } // namespace dart |
OLD | NEW |