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

Side by Side Diff: runtime/vm/raw_object.h

Issue 3007603002: [VM generic function reification] Support generic functions in Invocation class. (Closed)
Patch Set: address review comment Created 3 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
« no previous file with comments | « runtime/vm/precompiler.cc ('k') | runtime/vm/snapshot.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 (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) \
23 V(PatchClass) \ 22 V(PatchClass) \
24 V(Function) \ 23 V(Function) \
25 V(ClosureData) \ 24 V(ClosureData) \
26 V(SignatureData) \ 25 V(SignatureData) \
27 V(RedirectionData) \ 26 V(RedirectionData) \
28 V(Field) \ 27 V(Field) \
29 V(LiteralToken) \ 28 V(LiteralToken) \
30 V(TokenStream) \ 29 V(TokenStream) \
31 V(Script) \ 30 V(Script) \
32 V(Library) \ 31 V(Library) \
(...skipping 13 matching lines...) Expand all
46 V(ICData) \ 45 V(ICData) \
47 V(MegamorphicCache) \ 46 V(MegamorphicCache) \
48 V(SubtypeTestCache) \ 47 V(SubtypeTestCache) \
49 V(Error) \ 48 V(Error) \
50 V(ApiError) \ 49 V(ApiError) \
51 V(LanguageError) \ 50 V(LanguageError) \
52 V(UnhandledException) \ 51 V(UnhandledException) \
53 V(UnwindError) \ 52 V(UnwindError) \
54 V(Instance) \ 53 V(Instance) \
55 V(LibraryPrefix) \ 54 V(LibraryPrefix) \
55 V(TypeArguments) \
56 V(AbstractType) \ 56 V(AbstractType) \
57 V(Type) \ 57 V(Type) \
58 V(TypeRef) \ 58 V(TypeRef) \
59 V(TypeParameter) \ 59 V(TypeParameter) \
60 V(BoundedType) \ 60 V(BoundedType) \
61 V(MixinAppType) \ 61 V(MixinAppType) \
62 V(Closure) \ 62 V(Closure) \
63 V(Number) \ 63 V(Number) \
64 V(Integer) \ 64 V(Integer) \
65 V(Smi) \ 65 V(Smi) \
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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_
OLDNEW
« no previous file with comments | « runtime/vm/precompiler.cc ('k') | runtime/vm/snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698