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 #ifndef RUNTIME_VM_RAW_OBJECT_H_ | 5 #ifndef RUNTIME_VM_RAW_OBJECT_H_ |
6 #define RUNTIME_VM_RAW_OBJECT_H_ | 6 #define RUNTIME_VM_RAW_OBJECT_H_ |
7 | 7 |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/atomic.h" | 9 #include "vm/atomic.h" |
10 #include "vm/exceptions.h" | 10 #include "vm/exceptions.h" |
11 #include "vm/globals.h" | 11 #include "vm/globals.h" |
12 #include "vm/snapshot.h" | 12 #include "vm/snapshot.h" |
13 #include "vm/token.h" | 13 #include "vm/token.h" |
14 #include "vm/token_position.h" | 14 #include "vm/token_position.h" |
15 | 15 |
16 namespace dart { | 16 namespace dart { |
17 | 17 |
18 // Macrobatics to define the Object hierarchy of VM implementation classes. | 18 // Macrobatics to define the Object hierarchy of VM implementation classes. |
19 #define CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY(V) \ | 19 #define CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY(V) \ |
20 V(Class) \ | 20 V(Class) \ |
21 V(UnresolvedClass) \ | 21 V(UnresolvedClass) \ |
22 V(TypeArguments) \ | 22 V(TypeArguments) \ |
rmacnak
2017/08/28 18:29:46
This should appear after Instance to maintain the
regis
2017/08/28 23:32:08
Done.
This required indeed the addition of many sp
| |
23 V(PatchClass) \ | 23 V(PatchClass) \ |
24 V(Function) \ | 24 V(Function) \ |
25 V(ClosureData) \ | 25 V(ClosureData) \ |
26 V(SignatureData) \ | 26 V(SignatureData) \ |
27 V(RedirectionData) \ | 27 V(RedirectionData) \ |
28 V(Field) \ | 28 V(Field) \ |
29 V(LiteralToken) \ | 29 V(LiteralToken) \ |
30 V(TokenStream) \ | 30 V(TokenStream) \ |
31 V(Script) \ | 31 V(Script) \ |
32 V(Library) \ | 32 V(Library) \ |
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
775 RawObject** from() { | 775 RawObject** from() { |
776 return reinterpret_cast<RawObject**>(&ptr()->library_or_library_prefix_); | 776 return reinterpret_cast<RawObject**>(&ptr()->library_or_library_prefix_); |
777 } | 777 } |
778 RawObject* library_or_library_prefix_; // Library or library prefix qualifier | 778 RawObject* library_or_library_prefix_; // Library or library prefix qualifier |
779 // for the ident. | 779 // for the ident. |
780 RawString* ident_; // Name of the unresolved identifier. | 780 RawString* ident_; // Name of the unresolved identifier. |
781 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->ident_); } | 781 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->ident_); } |
782 TokenPosition token_pos_; | 782 TokenPosition token_pos_; |
783 }; | 783 }; |
784 | 784 |
785 class RawTypeArguments : public RawObject { | |
786 private: | |
787 RAW_HEAP_OBJECT_IMPLEMENTATION(TypeArguments); | |
788 | |
789 RawObject** from() { | |
790 return reinterpret_cast<RawObject**>(&ptr()->instantiations_); | |
791 } | |
792 // The instantiations_ array remains empty for instantiated type arguments. | |
793 RawArray* instantiations_; // Array of paired canonical vectors: | |
794 // Even index: instantiator. | |
795 // Odd index: instantiated (without bound error). | |
796 // Instantiations leading to bound errors do not get cached. | |
797 RawSmi* length_; | |
798 | |
799 RawSmi* hash_; | |
800 | |
801 // Variable length data follows here. | |
802 RawAbstractType* const* types() const { | |
803 OPEN_ARRAY_START(RawAbstractType*, RawAbstractType*); | |
804 } | |
805 RawAbstractType** types() { | |
806 OPEN_ARRAY_START(RawAbstractType*, RawAbstractType*); | |
807 } | |
808 RawObject** to(intptr_t length) { | |
809 return reinterpret_cast<RawObject**>(&ptr()->types()[length - 1]); | |
810 } | |
811 | |
812 friend class Object; | |
813 friend class SnapshotReader; | |
814 }; | |
815 | |
816 class RawPatchClass : public RawObject { | 785 class RawPatchClass : public RawObject { |
817 private: | 786 private: |
818 RAW_HEAP_OBJECT_IMPLEMENTATION(PatchClass); | 787 RAW_HEAP_OBJECT_IMPLEMENTATION(PatchClass); |
819 | 788 |
820 RawObject** from() { | 789 RawObject** from() { |
821 return reinterpret_cast<RawObject**>(&ptr()->patched_class_); | 790 return reinterpret_cast<RawObject**>(&ptr()->patched_class_); |
822 } | 791 } |
823 RawClass* patched_class_; | 792 RawClass* patched_class_; |
824 RawClass* origin_class_; | 793 RawClass* origin_class_; |
825 RawScript* script_; | 794 RawScript* script_; |
(...skipping 859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1685 break; | 1654 break; |
1686 } | 1655 } |
1687 UNREACHABLE(); | 1656 UNREACHABLE(); |
1688 return NULL; | 1657 return NULL; |
1689 } | 1658 } |
1690 uint16_t num_imports_; // Number of library entries in libraries_. | 1659 uint16_t num_imports_; // Number of library entries in libraries_. |
1691 bool is_deferred_load_; | 1660 bool is_deferred_load_; |
1692 bool is_loaded_; | 1661 bool is_loaded_; |
1693 }; | 1662 }; |
1694 | 1663 |
1664 class RawTypeArguments : public RawInstance { | |
1665 private: | |
1666 RAW_HEAP_OBJECT_IMPLEMENTATION(TypeArguments); | |
1667 | |
1668 RawObject** from() { | |
1669 return reinterpret_cast<RawObject**>(&ptr()->instantiations_); | |
1670 } | |
1671 // The instantiations_ array remains empty for instantiated type arguments. | |
1672 RawArray* instantiations_; // Array of paired canonical vectors: | |
1673 // Even index: instantiator. | |
1674 // Odd index: instantiated (without bound error). | |
1675 // Instantiations leading to bound errors do not get cached. | |
1676 RawSmi* length_; | |
1677 | |
1678 RawSmi* hash_; | |
1679 | |
1680 // Variable length data follows here. | |
1681 RawAbstractType* const* types() const { | |
1682 OPEN_ARRAY_START(RawAbstractType*, RawAbstractType*); | |
1683 } | |
1684 RawAbstractType** types() { | |
1685 OPEN_ARRAY_START(RawAbstractType*, RawAbstractType*); | |
1686 } | |
1687 RawObject** to(intptr_t length) { | |
1688 return reinterpret_cast<RawObject**>(&ptr()->types()[length - 1]); | |
1689 } | |
1690 | |
1691 friend class Object; | |
1692 friend class SnapshotReader; | |
1693 }; | |
1694 | |
1695 class RawAbstractType : public RawInstance { | 1695 class RawAbstractType : public RawInstance { |
1696 protected: | 1696 protected: |
1697 enum TypeState { | 1697 enum TypeState { |
1698 kAllocated, // Initial state. | 1698 kAllocated, // Initial state. |
1699 kResolved, // Type class and type arguments resolved. | 1699 kResolved, // Type class and type arguments resolved. |
1700 kBeingFinalized, // In the process of being finalized. | 1700 kBeingFinalized, // In the process of being finalized. |
1701 kFinalizedInstantiated, // Instantiated type ready for use. | 1701 kFinalizedInstantiated, // Instantiated type ready for use. |
1702 kFinalizedUninstantiated, // Uninstantiated type ready for use. | 1702 kFinalizedUninstantiated, // Uninstantiated type ready for use. |
1703 }; | 1703 }; |
1704 | 1704 |
(...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2440 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == | 2440 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == |
2441 kTypedDataInt8ArrayViewCid + 15); | 2441 kTypedDataInt8ArrayViewCid + 15); |
2442 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); | 2442 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); |
2443 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); | 2443 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); |
2444 return (kNullCid - kTypedDataInt8ArrayCid); | 2444 return (kNullCid - kTypedDataInt8ArrayCid); |
2445 } | 2445 } |
2446 | 2446 |
2447 } // namespace dart | 2447 } // namespace dart |
2448 | 2448 |
2449 #endif // RUNTIME_VM_RAW_OBJECT_H_ | 2449 #endif // RUNTIME_VM_RAW_OBJECT_H_ |
OLD | NEW |