| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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/object.h" | 5 #include "vm/object.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 | 392 |
| 393 Heap* heap = isolate->heap(); | 393 Heap* heap = isolate->heap(); |
| 394 | 394 |
| 395 // Allocate and initialize the null instance. | 395 // Allocate and initialize the null instance. |
| 396 // 'null_' must be the first object allocated as it is used in allocation to | 396 // 'null_' must be the first object allocated as it is used in allocation to |
| 397 // clear the object. | 397 // clear the object. |
| 398 { | 398 { |
| 399 uword address = heap->Allocate(Instance::InstanceSize(), Heap::kOld); | 399 uword address = heap->Allocate(Instance::InstanceSize(), Heap::kOld); |
| 400 null_ = reinterpret_cast<RawInstance*>(address + kHeapObjectTag); | 400 null_ = reinterpret_cast<RawInstance*>(address + kHeapObjectTag); |
| 401 // The call below is using 'null_' to initialize itself. | 401 // The call below is using 'null_' to initialize itself. |
| 402 InitializeObject(address, kNullCid, Instance::InstanceSize()); | 402 InitializeObject(address, kNullCid, Instance::InstanceSize(), true); |
| 403 } | 403 } |
| 404 } | 404 } |
| 405 | 405 |
| 406 | 406 |
| 407 void Object::InitOnce(Isolate* isolate) { | 407 void Object::InitOnce(Isolate* isolate) { |
| 408 // Should only be run by the vm isolate. | 408 // Should only be run by the vm isolate. |
| 409 ASSERT(isolate == Dart::vm_isolate()); | 409 ASSERT(isolate == Dart::vm_isolate()); |
| 410 | 410 |
| 411 // Initialize the static vtable values. | 411 // Initialize the static vtable values. |
| 412 { | 412 { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 *empty_array_ = Array::null(); | 455 *empty_array_ = Array::null(); |
| 456 *zero_array_ = Array::null(); | 456 *zero_array_ = Array::null(); |
| 457 | 457 |
| 458 Class& cls = Class::Handle(); | 458 Class& cls = Class::Handle(); |
| 459 | 459 |
| 460 // Allocate and initialize the class class. | 460 // Allocate and initialize the class class. |
| 461 { | 461 { |
| 462 intptr_t size = Class::InstanceSize(); | 462 intptr_t size = Class::InstanceSize(); |
| 463 uword address = heap->Allocate(size, Heap::kOld); | 463 uword address = heap->Allocate(size, Heap::kOld); |
| 464 class_class_ = reinterpret_cast<RawClass*>(address + kHeapObjectTag); | 464 class_class_ = reinterpret_cast<RawClass*>(address + kHeapObjectTag); |
| 465 InitializeObject(address, Class::kClassId, size); | 465 InitializeObject(address, Class::kClassId, size, true); |
| 466 | 466 |
| 467 Class fake; | 467 Class fake; |
| 468 // Initialization from Class::New<Class>. | 468 // Initialization from Class::New<Class>. |
| 469 // Directly set raw_ to break a circular dependency: SetRaw will attempt | 469 // Directly set raw_ to break a circular dependency: SetRaw will attempt |
| 470 // to lookup class class in the class table where it is not registered yet. | 470 // to lookup class class in the class table where it is not registered yet. |
| 471 cls.raw_ = class_class_; | 471 cls.raw_ = class_class_; |
| 472 cls.set_handle_vtable(fake.vtable()); | 472 cls.set_handle_vtable(fake.vtable()); |
| 473 cls.set_instance_size(Class::InstanceSize()); | 473 cls.set_instance_size(Class::InstanceSize()); |
| 474 cls.set_next_field_offset(Class::NextFieldOffset()); | 474 cls.set_next_field_offset(Class::NextFieldOffset()); |
| 475 cls.set_id(Class::kClassId); | 475 cls.set_id(Class::kClassId); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 628 // need it when reading in the token stream of bootstrap classes in the VM | 628 // need it when reading in the token stream of bootstrap classes in the VM |
| 629 // isolate. | 629 // isolate. |
| 630 Class::NewExternalTypedDataClass(kExternalTypedDataUint8ArrayCid); | 630 Class::NewExternalTypedDataClass(kExternalTypedDataUint8ArrayCid); |
| 631 | 631 |
| 632 // Needed for object pools of VM isolate stubs. | 632 // Needed for object pools of VM isolate stubs. |
| 633 Class::NewTypedDataClass(kTypedDataInt8ArrayCid); | 633 Class::NewTypedDataClass(kTypedDataInt8ArrayCid); |
| 634 | 634 |
| 635 // Allocate and initialize the empty_array instance. | 635 // Allocate and initialize the empty_array instance. |
| 636 { | 636 { |
| 637 uword address = heap->Allocate(Array::InstanceSize(0), Heap::kOld); | 637 uword address = heap->Allocate(Array::InstanceSize(0), Heap::kOld); |
| 638 InitializeObject(address, kImmutableArrayCid, Array::InstanceSize(0)); | 638 InitializeObject(address, kImmutableArrayCid, Array::InstanceSize(0), true); |
| 639 Array::initializeHandle( | 639 Array::initializeHandle( |
| 640 empty_array_, | 640 empty_array_, |
| 641 reinterpret_cast<RawArray*>(address + kHeapObjectTag)); | 641 reinterpret_cast<RawArray*>(address + kHeapObjectTag)); |
| 642 empty_array_->StoreSmi(&empty_array_->raw_ptr()->length_, Smi::New(0)); | 642 empty_array_->StoreSmi(&empty_array_->raw_ptr()->length_, Smi::New(0)); |
| 643 } | 643 } |
| 644 | 644 |
| 645 Smi& smi = Smi::Handle(); | 645 Smi& smi = Smi::Handle(); |
| 646 // Allocate and initialize the zero_array instance. | 646 // Allocate and initialize the zero_array instance. |
| 647 { | 647 { |
| 648 uword address = heap->Allocate(Array::InstanceSize(1), Heap::kOld); | 648 uword address = heap->Allocate(Array::InstanceSize(1), Heap::kOld); |
| 649 InitializeObject(address, kImmutableArrayCid, Array::InstanceSize(1)); | 649 InitializeObject(address, kImmutableArrayCid, Array::InstanceSize(1), true); |
| 650 Array::initializeHandle( | 650 Array::initializeHandle( |
| 651 zero_array_, | 651 zero_array_, |
| 652 reinterpret_cast<RawArray*>(address + kHeapObjectTag)); | 652 reinterpret_cast<RawArray*>(address + kHeapObjectTag)); |
| 653 zero_array_->StoreSmi(&zero_array_->raw_ptr()->length_, Smi::New(1)); | 653 zero_array_->StoreSmi(&zero_array_->raw_ptr()->length_, Smi::New(1)); |
| 654 smi = Smi::New(0); | 654 smi = Smi::New(0); |
| 655 zero_array_->SetAt(0, smi); | 655 zero_array_->SetAt(0, smi); |
| 656 } | 656 } |
| 657 | 657 |
| 658 // Allocate and initialize the canonical empty object pool object. | 658 // Allocate and initialize the canonical empty object pool object. |
| 659 { | 659 { |
| 660 uword address = | 660 uword address = |
| 661 heap->Allocate(ObjectPool::InstanceSize(0), Heap::kOld); | 661 heap->Allocate(ObjectPool::InstanceSize(0), Heap::kOld); |
| 662 InitializeObject(address, | 662 InitializeObject(address, |
| 663 kObjectPoolCid, | 663 kObjectPoolCid, |
| 664 ObjectPool::InstanceSize(0)); | 664 ObjectPool::InstanceSize(0), |
| 665 true); |
| 665 ObjectPool::initializeHandle( | 666 ObjectPool::initializeHandle( |
| 666 empty_object_pool_, | 667 empty_object_pool_, |
| 667 reinterpret_cast<RawObjectPool*>(address + kHeapObjectTag)); | 668 reinterpret_cast<RawObjectPool*>(address + kHeapObjectTag)); |
| 668 empty_object_pool_->StoreNonPointer( | 669 empty_object_pool_->StoreNonPointer( |
| 669 &empty_object_pool_->raw_ptr()->length_, 0); | 670 &empty_object_pool_->raw_ptr()->length_, 0); |
| 670 } | 671 } |
| 671 | 672 |
| 672 // Allocate and initialize the empty_descriptors instance. | 673 // Allocate and initialize the empty_descriptors instance. |
| 673 { | 674 { |
| 674 uword address = heap->Allocate(PcDescriptors::InstanceSize(0), Heap::kOld); | 675 uword address = heap->Allocate(PcDescriptors::InstanceSize(0), Heap::kOld); |
| 675 InitializeObject(address, kPcDescriptorsCid, | 676 InitializeObject(address, kPcDescriptorsCid, |
| 676 PcDescriptors::InstanceSize(0)); | 677 PcDescriptors::InstanceSize(0), |
| 678 true); |
| 677 PcDescriptors::initializeHandle( | 679 PcDescriptors::initializeHandle( |
| 678 empty_descriptors_, | 680 empty_descriptors_, |
| 679 reinterpret_cast<RawPcDescriptors*>(address + kHeapObjectTag)); | 681 reinterpret_cast<RawPcDescriptors*>(address + kHeapObjectTag)); |
| 680 empty_descriptors_->StoreNonPointer(&empty_descriptors_->raw_ptr()->length_, | 682 empty_descriptors_->StoreNonPointer(&empty_descriptors_->raw_ptr()->length_, |
| 681 0); | 683 0); |
| 682 } | 684 } |
| 683 | 685 |
| 684 // Allocate and initialize the canonical empty variable descriptor object. | 686 // Allocate and initialize the canonical empty variable descriptor object. |
| 685 { | 687 { |
| 686 uword address = | 688 uword address = |
| 687 heap->Allocate(LocalVarDescriptors::InstanceSize(0), Heap::kOld); | 689 heap->Allocate(LocalVarDescriptors::InstanceSize(0), Heap::kOld); |
| 688 InitializeObject(address, | 690 InitializeObject(address, |
| 689 kLocalVarDescriptorsCid, | 691 kLocalVarDescriptorsCid, |
| 690 LocalVarDescriptors::InstanceSize(0)); | 692 LocalVarDescriptors::InstanceSize(0), |
| 693 true); |
| 691 LocalVarDescriptors::initializeHandle( | 694 LocalVarDescriptors::initializeHandle( |
| 692 empty_var_descriptors_, | 695 empty_var_descriptors_, |
| 693 reinterpret_cast<RawLocalVarDescriptors*>(address + kHeapObjectTag)); | 696 reinterpret_cast<RawLocalVarDescriptors*>(address + kHeapObjectTag)); |
| 694 empty_var_descriptors_->StoreNonPointer( | 697 empty_var_descriptors_->StoreNonPointer( |
| 695 &empty_var_descriptors_->raw_ptr()->num_entries_, 0); | 698 &empty_var_descriptors_->raw_ptr()->num_entries_, 0); |
| 696 } | 699 } |
| 697 | 700 |
| 698 // Allocate and initialize the canonical empty exception handler info object. | 701 // Allocate and initialize the canonical empty exception handler info object. |
| 699 // The vast majority of all functions do not contain an exception handler | 702 // The vast majority of all functions do not contain an exception handler |
| 700 // and can share this canonical descriptor. | 703 // and can share this canonical descriptor. |
| 701 { | 704 { |
| 702 uword address = | 705 uword address = |
| 703 heap->Allocate(ExceptionHandlers::InstanceSize(0), Heap::kOld); | 706 heap->Allocate(ExceptionHandlers::InstanceSize(0), Heap::kOld); |
| 704 InitializeObject(address, | 707 InitializeObject(address, |
| 705 kExceptionHandlersCid, | 708 kExceptionHandlersCid, |
| 706 ExceptionHandlers::InstanceSize(0)); | 709 ExceptionHandlers::InstanceSize(0), |
| 710 true); |
| 707 ExceptionHandlers::initializeHandle( | 711 ExceptionHandlers::initializeHandle( |
| 708 empty_exception_handlers_, | 712 empty_exception_handlers_, |
| 709 reinterpret_cast<RawExceptionHandlers*>(address + kHeapObjectTag)); | 713 reinterpret_cast<RawExceptionHandlers*>(address + kHeapObjectTag)); |
| 710 empty_exception_handlers_->StoreNonPointer( | 714 empty_exception_handlers_->StoreNonPointer( |
| 711 &empty_exception_handlers_->raw_ptr()->num_entries_, 0); | 715 &empty_exception_handlers_->raw_ptr()->num_entries_, 0); |
| 712 } | 716 } |
| 713 | 717 |
| 714 // The VM isolate snapshot object table is initialized to an empty array | 718 // The VM isolate snapshot object table is initialized to an empty array |
| 715 // as we do not have any VM isolate snapshot at this time. | 719 // as we do not have any VM isolate snapshot at this time. |
| 716 *vm_isolate_snapshot_object_table_ = Object::empty_array().raw(); | 720 *vm_isolate_snapshot_object_table_ = Object::empty_array().raw(); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 // An object visitor which will mark all visited objects. This is used to | 806 // An object visitor which will mark all visited objects. This is used to |
| 803 // premark all objects in the vm_isolate_ heap. | 807 // premark all objects in the vm_isolate_ heap. |
| 804 class PremarkingVisitor : public ObjectVisitor { | 808 class PremarkingVisitor : public ObjectVisitor { |
| 805 public: | 809 public: |
| 806 explicit PremarkingVisitor(Isolate* isolate) : ObjectVisitor(isolate) {} | 810 explicit PremarkingVisitor(Isolate* isolate) : ObjectVisitor(isolate) {} |
| 807 | 811 |
| 808 void VisitObject(RawObject* obj) { | 812 void VisitObject(RawObject* obj) { |
| 809 ASSERT(!obj->IsMarked()); | 813 ASSERT(!obj->IsMarked()); |
| 810 // Free list elements should never be marked. | 814 // Free list elements should never be marked. |
| 811 if (!obj->IsFreeListElement()) { | 815 if (!obj->IsFreeListElement()) { |
| 816 ASSERT(obj->IsVMHeapObject()); |
| 812 obj->SetMarkBitUnsynchronized(); | 817 obj->SetMarkBitUnsynchronized(); |
| 813 } | 818 } |
| 814 } | 819 } |
| 815 }; | 820 }; |
| 816 | 821 |
| 817 | 822 |
| 818 #define SET_CLASS_NAME(class_name, name) \ | 823 #define SET_CLASS_NAME(class_name, name) \ |
| 819 cls = class_name##_class(); \ | 824 cls = class_name##_class(); \ |
| 820 cls.set_name(Symbols::name()); \ | 825 cls.set_name(Symbols::name()); \ |
| 821 | 826 |
| (...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1667 return; | 1672 return; |
| 1668 } | 1673 } |
| 1669 } | 1674 } |
| 1670 | 1675 |
| 1671 | 1676 |
| 1672 RawString* Object::DictionaryName() const { | 1677 RawString* Object::DictionaryName() const { |
| 1673 return String::null(); | 1678 return String::null(); |
| 1674 } | 1679 } |
| 1675 | 1680 |
| 1676 | 1681 |
| 1677 void Object::InitializeObject(uword address, intptr_t class_id, intptr_t size) { | 1682 void Object::InitializeObject(uword address, |
| 1683 intptr_t class_id, |
| 1684 intptr_t size, |
| 1685 bool is_vm_object) { |
| 1678 // TODO(iposva): Get a proper halt instruction from the assembler which | 1686 // TODO(iposva): Get a proper halt instruction from the assembler which |
| 1679 // would be needed here for code objects. | 1687 // would be needed here for code objects. |
| 1680 uword initial_value = reinterpret_cast<uword>(null_); | 1688 uword initial_value = reinterpret_cast<uword>(null_); |
| 1681 uword cur = address; | 1689 uword cur = address; |
| 1682 uword end = address + size; | 1690 uword end = address + size; |
| 1683 while (cur < end) { | 1691 while (cur < end) { |
| 1684 *reinterpret_cast<uword*>(cur) = initial_value; | 1692 *reinterpret_cast<uword*>(cur) = initial_value; |
| 1685 cur += kWordSize; | 1693 cur += kWordSize; |
| 1686 } | 1694 } |
| 1687 uword tags = 0; | 1695 uword tags = 0; |
| 1688 ASSERT(class_id != kIllegalCid); | 1696 ASSERT(class_id != kIllegalCid); |
| 1689 tags = RawObject::ClassIdTag::update(class_id, tags); | 1697 tags = RawObject::ClassIdTag::update(class_id, tags); |
| 1690 tags = RawObject::SizeTag::update(size, tags); | 1698 tags = RawObject::SizeTag::update(size, tags); |
| 1699 tags = RawObject::VMHeapObjectTag::update(is_vm_object, tags); |
| 1691 reinterpret_cast<RawObject*>(address)->tags_ = tags; | 1700 reinterpret_cast<RawObject*>(address)->tags_ = tags; |
| 1701 ASSERT(is_vm_object == RawObject::IsVMHeapObject(tags)); |
| 1692 VerifiedMemory::Accept(address, size); | 1702 VerifiedMemory::Accept(address, size); |
| 1693 } | 1703 } |
| 1694 | 1704 |
| 1695 | 1705 |
| 1696 void Object::CheckHandle() const { | 1706 void Object::CheckHandle() const { |
| 1697 #if defined(DEBUG) | 1707 #if defined(DEBUG) |
| 1698 if (raw_ != Object::null()) { | 1708 if (raw_ != Object::null()) { |
| 1699 if ((reinterpret_cast<uword>(raw_) & kSmiTagMask) == kSmiTag) { | 1709 if ((reinterpret_cast<uword>(raw_) & kSmiTagMask) == kSmiTag) { |
| 1700 ASSERT(vtable() == Smi::handle_vtable_); | 1710 ASSERT(vtable() == Smi::handle_vtable_); |
| 1701 return; | 1711 return; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1739 if (space == Heap::kNew) { | 1749 if (space == Heap::kNew) { |
| 1740 class_table->UpdateAllocatedNew(cls_id, size); | 1750 class_table->UpdateAllocatedNew(cls_id, size); |
| 1741 } else { | 1751 } else { |
| 1742 class_table->UpdateAllocatedOld(cls_id, size); | 1752 class_table->UpdateAllocatedOld(cls_id, size); |
| 1743 } | 1753 } |
| 1744 const Class& cls = Class::Handle(class_table->At(cls_id)); | 1754 const Class& cls = Class::Handle(class_table->At(cls_id)); |
| 1745 if (cls.trace_allocation()) { | 1755 if (cls.trace_allocation()) { |
| 1746 Profiler::RecordAllocation(isolate, cls_id); | 1756 Profiler::RecordAllocation(isolate, cls_id); |
| 1747 } | 1757 } |
| 1748 NoSafepointScope no_safepoint; | 1758 NoSafepointScope no_safepoint; |
| 1749 InitializeObject(address, cls_id, size); | 1759 InitializeObject(address, cls_id, size, (isolate == Dart::vm_isolate())); |
| 1750 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); | 1760 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); |
| 1751 ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); | 1761 ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); |
| 1752 return raw_obj; | 1762 return raw_obj; |
| 1753 } | 1763 } |
| 1754 | 1764 |
| 1755 | 1765 |
| 1756 class StoreBufferUpdateVisitor : public ObjectPointerVisitor { | 1766 class StoreBufferUpdateVisitor : public ObjectPointerVisitor { |
| 1757 public: | 1767 public: |
| 1758 explicit StoreBufferUpdateVisitor(Thread* thread, RawObject* obj) : | 1768 explicit StoreBufferUpdateVisitor(Thread* thread, RawObject* obj) : |
| 1759 ObjectPointerVisitor(thread->isolate()), thread_(thread), old_obj_(obj) { | 1769 ObjectPointerVisitor(thread->isolate()), thread_(thread), old_obj_(obj) { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1833 return GeneratePrettyName(); | 1843 return GeneratePrettyName(); |
| 1834 } | 1844 } |
| 1835 | 1845 |
| 1836 | 1846 |
| 1837 RawString* Class::UserVisibleName() const { | 1847 RawString* Class::UserVisibleName() const { |
| 1838 ASSERT(raw_ptr()->user_name_ != String::null()); | 1848 ASSERT(raw_ptr()->user_name_ != String::null()); |
| 1839 return raw_ptr()->user_name_; | 1849 return raw_ptr()->user_name_; |
| 1840 } | 1850 } |
| 1841 | 1851 |
| 1842 | 1852 |
| 1853 bool Class::IsInFullSnapshot() const { |
| 1854 NoSafepointScope no_safepoint; |
| 1855 return raw_ptr()->library_->ptr()->is_in_fullsnapshot_; |
| 1856 } |
| 1857 |
| 1858 |
| 1843 RawType* Class::SignatureType() const { | 1859 RawType* Class::SignatureType() const { |
| 1844 ASSERT(IsSignatureClass()); | 1860 ASSERT(IsSignatureClass()); |
| 1845 const Function& function = Function::Handle(signature_function()); | 1861 const Function& function = Function::Handle(signature_function()); |
| 1846 ASSERT(!function.IsNull()); | 1862 ASSERT(!function.IsNull()); |
| 1847 if (function.signature_class() != raw()) { | 1863 if (function.signature_class() != raw()) { |
| 1848 // This class is a function type alias. Return the canonical signature type. | 1864 // This class is a function type alias. Return the canonical signature type. |
| 1849 const Class& canonical_class = Class::Handle(function.signature_class()); | 1865 const Class& canonical_class = Class::Handle(function.signature_class()); |
| 1850 return canonical_class.SignatureType(); | 1866 return canonical_class.SignatureType(); |
| 1851 } | 1867 } |
| 1852 // Return the first canonical signature type if already computed at class | 1868 // Return the first canonical signature type if already computed at class |
| (...skipping 7966 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9819 GrowableObjectArray::New(4, Heap::kOld)); | 9835 GrowableObjectArray::New(4, Heap::kOld)); |
| 9820 result.StorePointer(&result.raw_ptr()->anonymous_classes_, | 9836 result.StorePointer(&result.raw_ptr()->anonymous_classes_, |
| 9821 Object::empty_array().raw()); | 9837 Object::empty_array().raw()); |
| 9822 result.StoreNonPointer(&result.raw_ptr()->num_anonymous_, 0); | 9838 result.StoreNonPointer(&result.raw_ptr()->num_anonymous_, 0); |
| 9823 result.StorePointer(&result.raw_ptr()->imports_, Object::empty_array().raw()); | 9839 result.StorePointer(&result.raw_ptr()->imports_, Object::empty_array().raw()); |
| 9824 result.StorePointer(&result.raw_ptr()->exports_, Object::empty_array().raw()); | 9840 result.StorePointer(&result.raw_ptr()->exports_, Object::empty_array().raw()); |
| 9825 result.StorePointer(&result.raw_ptr()->loaded_scripts_, Array::null()); | 9841 result.StorePointer(&result.raw_ptr()->loaded_scripts_, Array::null()); |
| 9826 result.StorePointer(&result.raw_ptr()->load_error_, Instance::null()); | 9842 result.StorePointer(&result.raw_ptr()->load_error_, Instance::null()); |
| 9827 result.set_native_entry_resolver(NULL); | 9843 result.set_native_entry_resolver(NULL); |
| 9828 result.set_native_entry_symbol_resolver(NULL); | 9844 result.set_native_entry_symbol_resolver(NULL); |
| 9845 result.set_is_in_fullsnapshot(false); |
| 9829 result.StoreNonPointer(&result.raw_ptr()->corelib_imported_, true); | 9846 result.StoreNonPointer(&result.raw_ptr()->corelib_imported_, true); |
| 9830 result.set_debuggable(false); | 9847 result.set_debuggable(false); |
| 9831 result.set_is_dart_scheme(url.StartsWith(Symbols::DartScheme())); | 9848 result.set_is_dart_scheme(url.StartsWith(Symbols::DartScheme())); |
| 9832 result.StoreNonPointer(&result.raw_ptr()->load_state_, | 9849 result.StoreNonPointer(&result.raw_ptr()->load_state_, |
| 9833 RawLibrary::kAllocated); | 9850 RawLibrary::kAllocated); |
| 9834 result.StoreNonPointer(&result.raw_ptr()->index_, -1); | 9851 result.StoreNonPointer(&result.raw_ptr()->index_, -1); |
| 9835 const intptr_t kInitialNameCacheSize = 64; | 9852 const intptr_t kInitialNameCacheSize = 64; |
| 9836 result.InitResolvedNamesCache(kInitialNameCacheSize); | 9853 result.InitResolvedNamesCache(kInitialNameCacheSize); |
| 9837 result.InitClassDictionary(); | 9854 result.InitClassDictionary(); |
| 9838 result.InitImportList(); | 9855 result.InitImportList(); |
| (...skipping 5412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15251 type ^= type.Canonicalize(); | 15268 type ^= type.Canonicalize(); |
| 15252 } | 15269 } |
| 15253 ASSERT(type.IsFinalized()); | 15270 ASSERT(type.IsFinalized()); |
| 15254 return type.raw(); | 15271 return type.raw(); |
| 15255 } | 15272 } |
| 15256 | 15273 |
| 15257 | 15274 |
| 15258 void Type::SetIsFinalized() const { | 15275 void Type::SetIsFinalized() const { |
| 15259 ASSERT(!IsFinalized()); | 15276 ASSERT(!IsFinalized()); |
| 15260 if (IsInstantiated()) { | 15277 if (IsInstantiated()) { |
| 15278 ASSERT(HasResolvedTypeClass()); |
| 15261 set_type_state(RawType::kFinalizedInstantiated); | 15279 set_type_state(RawType::kFinalizedInstantiated); |
| 15262 } else { | 15280 } else { |
| 15263 set_type_state(RawType::kFinalizedUninstantiated); | 15281 set_type_state(RawType::kFinalizedUninstantiated); |
| 15264 } | 15282 } |
| 15265 } | 15283 } |
| 15266 | 15284 |
| 15267 | 15285 |
| 15268 void Type::ResetIsFinalized() const { | 15286 void Type::ResetIsFinalized() const { |
| 15269 ASSERT(IsFinalized()); | 15287 ASSERT(IsFinalized()); |
| 15270 set_type_state(RawType::kBeingFinalized); | 15288 set_type_state(RawType::kBeingFinalized); |
| (...skipping 6072 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 21343 return tag_label.ToCString(); | 21361 return tag_label.ToCString(); |
| 21344 } | 21362 } |
| 21345 | 21363 |
| 21346 | 21364 |
| 21347 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 21365 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 21348 Instance::PrintJSONImpl(stream, ref); | 21366 Instance::PrintJSONImpl(stream, ref); |
| 21349 } | 21367 } |
| 21350 | 21368 |
| 21351 | 21369 |
| 21352 } // namespace dart | 21370 } // namespace dart |
| OLD | NEW |