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 VM_OBJECT_H_ | 5 #ifndef VM_OBJECT_H_ |
6 #define VM_OBJECT_H_ | 6 #define VM_OBJECT_H_ |
7 | 7 |
8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "platform/utils.h" | 10 #include "platform/utils.h" |
(...skipping 21 matching lines...) Expand all Loading... | |
32 class DeoptInstr; | 32 class DeoptInstr; |
33 class LocalScope; | 33 class LocalScope; |
34 class Symbols; | 34 class Symbols; |
35 | 35 |
36 #if defined(DEBUG) | 36 #if defined(DEBUG) |
37 #define CHECK_HANDLE() CheckHandle(); | 37 #define CHECK_HANDLE() CheckHandle(); |
38 #else | 38 #else |
39 #define CHECK_HANDLE() | 39 #define CHECK_HANDLE() |
40 #endif | 40 #endif |
41 | 41 |
42 #define OBJECT_IMPLEMENTATION(object, super) \ | 42 #define BASE_OBJECT_IMPLEMENTATION(object, super) \ |
43 public: /* NOLINT */ \ | 43 public: /* NOLINT */ \ |
44 Raw##object* raw() const { return reinterpret_cast<Raw##object*>(raw_); } \ | 44 Raw##object* raw() const { return reinterpret_cast<Raw##object*>(raw_); } \ |
45 void operator=(Raw##object* value) { \ | |
46 initializeHandle(this, value); \ | |
47 } \ | |
48 bool Is##object() const { return true; } \ | 45 bool Is##object() const { return true; } \ |
49 void operator^=(RawObject* value) { \ | |
50 initializeHandle(this, value); \ | |
51 ASSERT(IsNull() || Is##object()); \ | |
52 } \ | |
53 void operator|=(RawObject* value) { \ | |
54 raw_ = value; \ | |
55 CHECK_HANDLE(); \ | |
56 } \ | |
57 static object& Handle(Isolate* isolate, Raw##object* raw_ptr) { \ | 46 static object& Handle(Isolate* isolate, Raw##object* raw_ptr) { \ |
58 object* obj = \ | 47 object* obj = \ |
59 reinterpret_cast<object*>(VMHandles::AllocateHandle(isolate)); \ | 48 reinterpret_cast<object*>(VMHandles::AllocateHandle(isolate)); \ |
60 initializeHandle(obj, raw_ptr); \ | 49 initializeHandle(obj, raw_ptr); \ |
61 return *obj; \ | 50 return *obj; \ |
62 } \ | 51 } \ |
63 static object& Handle() { \ | 52 static object& Handle() { \ |
64 return Handle(Isolate::Current(), object::null()); \ | 53 return Handle(Isolate::Current(), object::null()); \ |
65 } \ | 54 } \ |
66 static object& Handle(Isolate* isolate) { \ | 55 static object& Handle(Isolate* isolate) { \ |
(...skipping 14 matching lines...) Expand all Loading... | |
81 } \ | 70 } \ |
82 static object& CheckedHandle(RawObject* raw_ptr) { \ | 71 static object& CheckedHandle(RawObject* raw_ptr) { \ |
83 return CheckedHandle(Isolate::Current(), raw_ptr); \ | 72 return CheckedHandle(Isolate::Current(), raw_ptr); \ |
84 } \ | 73 } \ |
85 static object& ZoneHandle(Isolate* isolate, Raw##object* raw_ptr) { \ | 74 static object& ZoneHandle(Isolate* isolate, Raw##object* raw_ptr) { \ |
86 object* obj = reinterpret_cast<object*>( \ | 75 object* obj = reinterpret_cast<object*>( \ |
87 VMHandles::AllocateZoneHandle(isolate)); \ | 76 VMHandles::AllocateZoneHandle(isolate)); \ |
88 initializeHandle(obj, raw_ptr); \ | 77 initializeHandle(obj, raw_ptr); \ |
89 return *obj; \ | 78 return *obj; \ |
90 } \ | 79 } \ |
80 static object* ReadOnlyHandle(Isolate* isolate) { \ | |
81 object* obj = reinterpret_cast<object*>( \ | |
82 Dart::AllocateReadOnlyHandle()); \ | |
83 initializeHandle(obj, object::null()); \ | |
84 return obj; \ | |
85 } \ | |
91 static object& ZoneHandle() { \ | 86 static object& ZoneHandle() { \ |
92 return ZoneHandle(Isolate::Current(), object::null()); \ | 87 return ZoneHandle(Isolate::Current(), object::null()); \ |
93 } \ | 88 } \ |
94 static object& ZoneHandle(Raw##object* raw_ptr) { \ | 89 static object& ZoneHandle(Raw##object* raw_ptr) { \ |
95 return ZoneHandle(Isolate::Current(), raw_ptr); \ | 90 return ZoneHandle(Isolate::Current(), raw_ptr); \ |
96 } \ | 91 } \ |
97 static object& CheckedZoneHandle(Isolate* isolate, RawObject* raw_ptr) { \ | 92 static object& CheckedZoneHandle(Isolate* isolate, RawObject* raw_ptr) { \ |
98 object* obj = reinterpret_cast<object*>( \ | 93 object* obj = reinterpret_cast<object*>( \ |
99 VMHandles::AllocateZoneHandle(isolate)); \ | 94 VMHandles::AllocateZoneHandle(isolate)); \ |
100 initializeHandle(obj, raw_ptr); \ | 95 initializeHandle(obj, raw_ptr); \ |
(...skipping 12 matching lines...) Expand all Loading... | |
113 static const object& Cast(const Object& obj) { \ | 108 static const object& Cast(const Object& obj) { \ |
114 ASSERT(obj.Is##object()); \ | 109 ASSERT(obj.Is##object()); \ |
115 return reinterpret_cast<const object&>(obj); \ | 110 return reinterpret_cast<const object&>(obj); \ |
116 } \ | 111 } \ |
117 static Raw##object* null() { \ | 112 static Raw##object* null() { \ |
118 return reinterpret_cast<Raw##object*>(Object::null()); \ | 113 return reinterpret_cast<Raw##object*>(Object::null()); \ |
119 } \ | 114 } \ |
120 virtual const char* ToCString() const; \ | 115 virtual const char* ToCString() const; \ |
121 static const ClassId kClassId = k##object##Cid; \ | 116 static const ClassId kClassId = k##object##Cid; \ |
122 protected: /* NOLINT */ \ | 117 protected: /* NOLINT */ \ |
123 object() : super() {} \ | 118 object() : super() {} \ |
Ivan Posva
2013/01/23 03:44:20
Can't we prevent subclassing of FINAL classes by m
siva
2013/01/23 19:26:53
Done.
| |
124 private: /* NOLINT */ \ | 119 private: /* NOLINT */ \ |
125 /* Initialize the handle based on the raw_ptr in the presence of null. */ \ | 120 /* Initialize the handle based on the raw_ptr in the presence of null. */ \ |
126 static void initializeHandle(object* obj, RawObject* raw_ptr) { \ | 121 static void initializeHandle(object* obj, RawObject* raw_ptr) { \ |
127 if (raw_ptr != Object::null()) { \ | 122 if (raw_ptr != Object::null()) { \ |
128 obj->SetRaw(raw_ptr); \ | 123 obj->SetRaw(raw_ptr); \ |
129 } else { \ | 124 } else { \ |
130 obj->raw_ = Object::null(); \ | 125 obj->raw_ = Object::null(); \ |
131 object fake_object; \ | 126 object fake_object; \ |
132 obj->set_vtable(fake_object.vtable()); \ | 127 obj->set_vtable(fake_object.vtable()); \ |
133 } \ | 128 } \ |
134 } \ | 129 } \ |
135 /* Disallow allocation, copy constructors and override super assignment. */ \ | 130 /* Disallow allocation, copy constructors and override super assignment. */ \ |
136 void* operator new(size_t size); \ | 131 void* operator new(size_t size); \ |
137 object(const object& value); \ | 132 object(const object& value); \ |
138 void operator=(Raw##super* value); \ | 133 void operator=(Raw##super* value); \ |
139 void operator=(const object& value); \ | 134 void operator=(const object& value); \ |
140 void operator=(const super& value); \ | 135 void operator=(const super& value); \ |
141 | 136 |
142 #define SNAPSHOT_READER_SUPPORT(object) \ | 137 #define SNAPSHOT_READER_SUPPORT(object) \ |
143 static Raw##object* ReadFrom(SnapshotReader* reader, \ | 138 static Raw##object* ReadFrom(SnapshotReader* reader, \ |
144 intptr_t object_id, \ | 139 intptr_t object_id, \ |
145 intptr_t tags, \ | 140 intptr_t tags, \ |
146 Snapshot::Kind); \ | 141 Snapshot::Kind); \ |
147 friend class SnapshotReader; \ | 142 friend class SnapshotReader; \ |
148 | 143 |
144 #define OBJECT_IMPLEMENTATION(object, super) \ | |
145 public: /* NOLINT */ \ | |
146 void operator=(Raw##object* value) { \ | |
147 initializeHandle(this, value); \ | |
148 } \ | |
149 void operator^=(RawObject* value) { \ | |
150 initializeHandle(this, value); \ | |
151 ASSERT(IsNull() || Is##object()); \ | |
152 } \ | |
153 BASE_OBJECT_IMPLEMENTATION(object, super) \ | |
154 | |
149 #define HEAP_OBJECT_IMPLEMENTATION(object, super) \ | 155 #define HEAP_OBJECT_IMPLEMENTATION(object, super) \ |
150 OBJECT_IMPLEMENTATION(object, super); \ | 156 OBJECT_IMPLEMENTATION(object, super); \ |
151 Raw##object* raw_ptr() const { \ | 157 Raw##object* raw_ptr() const { \ |
152 ASSERT(raw() != null()); \ | 158 ASSERT(raw() != null()); \ |
153 return raw()->ptr(); \ | 159 return raw()->ptr(); \ |
154 } \ | 160 } \ |
155 SNAPSHOT_READER_SUPPORT(object) \ | 161 SNAPSHOT_READER_SUPPORT(object) \ |
156 friend class StackFrame; \ | 162 friend class StackFrame; \ |
157 | 163 |
164 // This macro is used to denote types that do not have a sub-type. | |
165 #define FINAL_HEAP_OBJECT_IMPLEMENTATION(object, super) \ | |
166 public: /* NOLINT */ \ | |
167 void operator=(Raw##object* value) { \ | |
168 raw_ = value; \ | |
169 CHECK_HANDLE(); \ | |
170 } \ | |
171 void operator^=(RawObject* value) { \ | |
172 raw_ = value; \ | |
173 CHECK_HANDLE(); \ | |
174 } \ | |
175 BASE_OBJECT_IMPLEMENTATION(object, super) \ | |
176 Raw##object* raw_ptr() const { \ | |
177 ASSERT(raw() != null()); \ | |
178 return raw()->ptr(); \ | |
179 } \ | |
180 SNAPSHOT_READER_SUPPORT(object) \ | |
181 friend class StackFrame; \ | |
182 | |
158 class Object { | 183 class Object { |
159 public: | 184 public: |
160 virtual ~Object() { } | 185 virtual ~Object() { } |
161 | 186 |
162 RawObject* raw() const { return raw_; } | 187 RawObject* raw() const { return raw_; } |
163 void operator=(RawObject* value) { | 188 void operator=(RawObject* value) { |
164 initializeHandle(this, value); | 189 initializeHandle(this, value); |
165 } | 190 } |
166 | 191 |
167 void set_tags(intptr_t value) const { | 192 void set_tags(intptr_t value) const { |
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
853 const Script& script, | 878 const Script& script, |
854 intptr_t token_pos); | 879 intptr_t token_pos); |
855 | 880 |
856 // Check the subtype or 'more specific' relationship. | 881 // Check the subtype or 'more specific' relationship. |
857 bool TypeTest(TypeTestKind test_kind, | 882 bool TypeTest(TypeTestKind test_kind, |
858 const AbstractTypeArguments& type_arguments, | 883 const AbstractTypeArguments& type_arguments, |
859 const Class& other, | 884 const Class& other, |
860 const AbstractTypeArguments& other_type_arguments, | 885 const AbstractTypeArguments& other_type_arguments, |
861 Error* malformed_error) const; | 886 Error* malformed_error) const; |
862 | 887 |
863 HEAP_OBJECT_IMPLEMENTATION(Class, Object); | 888 FINAL_HEAP_OBJECT_IMPLEMENTATION(Class, Object); |
864 friend class AbstractType; | 889 friend class AbstractType; |
865 friend class Instance; | 890 friend class Instance; |
866 friend class Object; | 891 friend class Object; |
867 friend class Type; | 892 friend class Type; |
868 }; | 893 }; |
869 | 894 |
870 | 895 |
871 // Unresolved class is used for storing unresolved names which will be resolved | 896 // Unresolved class is used for storing unresolved names which will be resolved |
872 // to a class after all classes have been loaded and finalized. | 897 // to a class after all classes have been loaded and finalized. |
873 class UnresolvedClass : public Object { | 898 class UnresolvedClass : public Object { |
(...skipping 13 matching lines...) Expand all Loading... | |
887 const String& ident, | 912 const String& ident, |
888 intptr_t token_pos); | 913 intptr_t token_pos); |
889 | 914 |
890 private: | 915 private: |
891 void set_library_prefix(const LibraryPrefix& library_prefix) const; | 916 void set_library_prefix(const LibraryPrefix& library_prefix) const; |
892 void set_ident(const String& ident) const; | 917 void set_ident(const String& ident) const; |
893 void set_token_pos(intptr_t token_pos) const; | 918 void set_token_pos(intptr_t token_pos) const; |
894 | 919 |
895 static RawUnresolvedClass* New(); | 920 static RawUnresolvedClass* New(); |
896 | 921 |
897 HEAP_OBJECT_IMPLEMENTATION(UnresolvedClass, Object); | 922 FINAL_HEAP_OBJECT_IMPLEMENTATION(UnresolvedClass, Object); |
898 friend class Class; | 923 friend class Class; |
899 }; | 924 }; |
900 | 925 |
901 | 926 |
902 // AbstractTypeArguments is an abstract superclass. | 927 // AbstractTypeArguments is an abstract superclass. |
903 // Subclasses of AbstractTypeArguments are TypeArguments and | 928 // Subclasses of AbstractTypeArguments are TypeArguments and |
904 // InstantiatedTypeArguments. | 929 // InstantiatedTypeArguments. |
905 class AbstractTypeArguments : public Object { | 930 class AbstractTypeArguments : public Object { |
906 public: | 931 public: |
907 // Returns true if both arguments represent vectors of equal types. | 932 // Returns true if both arguments represent vectors of equal types. |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1116 return RoundedAllocationSize(sizeof(RawPatchClass)); | 1141 return RoundedAllocationSize(sizeof(RawPatchClass)); |
1117 } | 1142 } |
1118 | 1143 |
1119 static RawPatchClass* New(const Class& patched_class, const Script& script); | 1144 static RawPatchClass* New(const Class& patched_class, const Script& script); |
1120 | 1145 |
1121 private: | 1146 private: |
1122 void set_patched_class(const Class& value) const; | 1147 void set_patched_class(const Class& value) const; |
1123 void set_script(const Script& value) const; | 1148 void set_script(const Script& value) const; |
1124 static RawPatchClass* New(); | 1149 static RawPatchClass* New(); |
1125 | 1150 |
1126 HEAP_OBJECT_IMPLEMENTATION(PatchClass, Object); | 1151 FINAL_HEAP_OBJECT_IMPLEMENTATION(PatchClass, Object); |
1127 friend class Class; | 1152 friend class Class; |
1128 }; | 1153 }; |
1129 | 1154 |
1130 | 1155 |
1131 class Function : public Object { | 1156 class Function : public Object { |
1132 public: | 1157 public: |
1133 RawString* name() const { return raw_ptr()->name_; } | 1158 RawString* name() const { return raw_ptr()->name_; } |
1134 RawString* UserVisibleName() const; | 1159 RawString* UserVisibleName() const; |
1135 RawString* QualifiedUserVisibleName() const; | 1160 RawString* QualifiedUserVisibleName() const; |
1136 virtual RawString* DictionaryName() const { return name(); } | 1161 virtual RawString* DictionaryName() const { return name(); } |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1594 // subtyping or 'more specific' relationship between the type of this function | 1619 // subtyping or 'more specific' relationship between the type of this function |
1595 // and the type of the other function. | 1620 // and the type of the other function. |
1596 bool TestParameterType(TypeTestKind test_kind, | 1621 bool TestParameterType(TypeTestKind test_kind, |
1597 intptr_t parameter_position, | 1622 intptr_t parameter_position, |
1598 intptr_t other_parameter_position, | 1623 intptr_t other_parameter_position, |
1599 const AbstractTypeArguments& type_arguments, | 1624 const AbstractTypeArguments& type_arguments, |
1600 const Function& other, | 1625 const Function& other, |
1601 const AbstractTypeArguments& other_type_arguments, | 1626 const AbstractTypeArguments& other_type_arguments, |
1602 Error* malformed_error) const; | 1627 Error* malformed_error) const; |
1603 | 1628 |
1604 HEAP_OBJECT_IMPLEMENTATION(Function, Object); | 1629 FINAL_HEAP_OBJECT_IMPLEMENTATION(Function, Object); |
1605 friend class Class; | 1630 friend class Class; |
1606 }; | 1631 }; |
1607 | 1632 |
1608 | 1633 |
1609 class ClosureData: public Object { | 1634 class ClosureData: public Object { |
1610 public: | 1635 public: |
1611 static intptr_t InstanceSize() { | 1636 static intptr_t InstanceSize() { |
1612 return RoundedAllocationSize(sizeof(RawClosureData)); | 1637 return RoundedAllocationSize(sizeof(RawClosureData)); |
1613 } | 1638 } |
1614 | 1639 |
(...skipping 14 matching lines...) Expand all Loading... | |
1629 } | 1654 } |
1630 void set_implicit_static_closure(const Instance& closure) const; | 1655 void set_implicit_static_closure(const Instance& closure) const; |
1631 | 1656 |
1632 RawCode* closure_allocation_stub() const { | 1657 RawCode* closure_allocation_stub() const { |
1633 return raw_ptr()->closure_allocation_stub_; | 1658 return raw_ptr()->closure_allocation_stub_; |
1634 } | 1659 } |
1635 void set_closure_allocation_stub(const Code& value) const; | 1660 void set_closure_allocation_stub(const Code& value) const; |
1636 | 1661 |
1637 static RawClosureData* New(); | 1662 static RawClosureData* New(); |
1638 | 1663 |
1639 HEAP_OBJECT_IMPLEMENTATION(ClosureData, Object); | 1664 FINAL_HEAP_OBJECT_IMPLEMENTATION(ClosureData, Object); |
1640 friend class Class; | 1665 friend class Class; |
1641 friend class Function; | 1666 friend class Function; |
1642 friend class HeapProfiler; | 1667 friend class HeapProfiler; |
1643 }; | 1668 }; |
1644 | 1669 |
1645 | 1670 |
1646 class RedirectionData: public Object { | 1671 class RedirectionData: public Object { |
1647 public: | 1672 public: |
1648 static intptr_t InstanceSize() { | 1673 static intptr_t InstanceSize() { |
1649 return RoundedAllocationSize(sizeof(RawRedirectionData)); | 1674 return RoundedAllocationSize(sizeof(RawRedirectionData)); |
1650 } | 1675 } |
1651 | 1676 |
1652 private: | 1677 private: |
1653 // The type specifies the class and type arguments of the target constructor. | 1678 // The type specifies the class and type arguments of the target constructor. |
1654 RawType* type() const { return raw_ptr()->type_; } | 1679 RawType* type() const { return raw_ptr()->type_; } |
1655 void set_type(const Type& value) const; | 1680 void set_type(const Type& value) const; |
1656 | 1681 |
1657 // The optional identifier specifies a named constructor. | 1682 // The optional identifier specifies a named constructor. |
1658 RawString* identifier() const { return raw_ptr()->identifier_; } | 1683 RawString* identifier() const { return raw_ptr()->identifier_; } |
1659 void set_identifier(const String& value) const; | 1684 void set_identifier(const String& value) const; |
1660 | 1685 |
1661 // The resolved constructor or factory target of the redirection. | 1686 // The resolved constructor or factory target of the redirection. |
1662 RawFunction* target() const { return raw_ptr()->target_; } | 1687 RawFunction* target() const { return raw_ptr()->target_; } |
1663 void set_target(const Function& value) const; | 1688 void set_target(const Function& value) const; |
1664 | 1689 |
1665 static RawRedirectionData* New(); | 1690 static RawRedirectionData* New(); |
1666 | 1691 |
1667 HEAP_OBJECT_IMPLEMENTATION(RedirectionData, Object); | 1692 FINAL_HEAP_OBJECT_IMPLEMENTATION(RedirectionData, Object); |
1668 friend class Class; | 1693 friend class Class; |
1669 friend class Function; | 1694 friend class Function; |
1670 friend class HeapProfiler; | 1695 friend class HeapProfiler; |
1671 }; | 1696 }; |
1672 | 1697 |
1673 | 1698 |
1674 class Field : public Object { | 1699 class Field : public Object { |
1675 public: | 1700 public: |
1676 RawString* name() const { return raw_ptr()->name_; } | 1701 RawString* name() const { return raw_ptr()->name_; } |
1677 RawString* UserVisibleName() const; | 1702 RawString* UserVisibleName() const; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1751 StorePointer(&raw_ptr()->owner_, value.raw()); | 1776 StorePointer(&raw_ptr()->owner_, value.raw()); |
1752 } | 1777 } |
1753 void set_token_pos(intptr_t token_pos) const { | 1778 void set_token_pos(intptr_t token_pos) const { |
1754 raw_ptr()->token_pos_ = token_pos; | 1779 raw_ptr()->token_pos_ = token_pos; |
1755 } | 1780 } |
1756 void set_kind_bits(intptr_t value) const { | 1781 void set_kind_bits(intptr_t value) const { |
1757 raw_ptr()->kind_bits_ = static_cast<uint8_t>(value); | 1782 raw_ptr()->kind_bits_ = static_cast<uint8_t>(value); |
1758 } | 1783 } |
1759 static RawField* New(); | 1784 static RawField* New(); |
1760 | 1785 |
1761 HEAP_OBJECT_IMPLEMENTATION(Field, Object); | 1786 FINAL_HEAP_OBJECT_IMPLEMENTATION(Field, Object); |
1762 friend class Class; | 1787 friend class Class; |
1763 friend class HeapProfiler; | 1788 friend class HeapProfiler; |
1764 }; | 1789 }; |
1765 | 1790 |
1766 | 1791 |
1767 class LiteralToken : public Object { | 1792 class LiteralToken : public Object { |
1768 public: | 1793 public: |
1769 Token::Kind kind() const { return raw_ptr()->kind_; } | 1794 Token::Kind kind() const { return raw_ptr()->kind_; } |
1770 RawString* literal() const { return raw_ptr()->literal_; } | 1795 RawString* literal() const { return raw_ptr()->literal_; } |
1771 RawObject* value() const { return raw_ptr()->value_; } | 1796 RawObject* value() const { return raw_ptr()->value_; } |
1772 | 1797 |
1773 static intptr_t InstanceSize() { | 1798 static intptr_t InstanceSize() { |
1774 return RoundedAllocationSize(sizeof(RawLiteralToken)); | 1799 return RoundedAllocationSize(sizeof(RawLiteralToken)); |
1775 } | 1800 } |
1776 | 1801 |
1777 static RawLiteralToken* New(); | 1802 static RawLiteralToken* New(); |
1778 static RawLiteralToken* New(Token::Kind kind, const String& literal); | 1803 static RawLiteralToken* New(Token::Kind kind, const String& literal); |
1779 | 1804 |
1780 private: | 1805 private: |
1781 void set_kind(Token::Kind kind) const { raw_ptr()->kind_ = kind; } | 1806 void set_kind(Token::Kind kind) const { raw_ptr()->kind_ = kind; } |
1782 void set_literal(const String& literal) const; | 1807 void set_literal(const String& literal) const; |
1783 void set_value(const Object& value) const; | 1808 void set_value(const Object& value) const; |
1784 | 1809 |
1785 HEAP_OBJECT_IMPLEMENTATION(LiteralToken, Object); | 1810 FINAL_HEAP_OBJECT_IMPLEMENTATION(LiteralToken, Object); |
1786 friend class Class; | 1811 friend class Class; |
1787 }; | 1812 }; |
1788 | 1813 |
1789 | 1814 |
1790 class TokenStream : public Object { | 1815 class TokenStream : public Object { |
1791 public: | 1816 public: |
1792 RawArray* TokenObjects() const; | 1817 RawArray* TokenObjects() const; |
1793 void SetTokenObjects(const Array& value) const; | 1818 void SetTokenObjects(const Array& value) const; |
1794 | 1819 |
1795 RawExternalUint8Array* GetStream() const; | 1820 RawExternalUint8Array* GetStream() const; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1853 Token::Kind cur_token_kind_; | 1878 Token::Kind cur_token_kind_; |
1854 intptr_t cur_token_obj_index_; | 1879 intptr_t cur_token_obj_index_; |
1855 }; | 1880 }; |
1856 | 1881 |
1857 private: | 1882 private: |
1858 void SetPrivateKey(const String& value) const; | 1883 void SetPrivateKey(const String& value) const; |
1859 | 1884 |
1860 static RawTokenStream* New(); | 1885 static RawTokenStream* New(); |
1861 static void DataFinalizer(void *peer); | 1886 static void DataFinalizer(void *peer); |
1862 | 1887 |
1863 HEAP_OBJECT_IMPLEMENTATION(TokenStream, Object); | 1888 FINAL_HEAP_OBJECT_IMPLEMENTATION(TokenStream, Object); |
1864 friend class Class; | 1889 friend class Class; |
1865 }; | 1890 }; |
1866 | 1891 |
1867 | 1892 |
1868 class Script : public Object { | 1893 class Script : public Object { |
1869 public: | 1894 public: |
1870 RawString* url() const { return raw_ptr()->url_; } | 1895 RawString* url() const { return raw_ptr()->url_; } |
1871 bool HasSource() const; | 1896 bool HasSource() const; |
1872 RawString* Source() const; | 1897 RawString* Source() const; |
1873 RawScript::Kind kind() const { | 1898 RawScript::Kind kind() const { |
(...skipping 30 matching lines...) Expand all Loading... | |
1904 const String& source, | 1929 const String& source, |
1905 RawScript::Kind kind); | 1930 RawScript::Kind kind); |
1906 | 1931 |
1907 private: | 1932 private: |
1908 void set_url(const String& value) const; | 1933 void set_url(const String& value) const; |
1909 void set_source(const String& value) const; | 1934 void set_source(const String& value) const; |
1910 void set_kind(RawScript::Kind value) const; | 1935 void set_kind(RawScript::Kind value) const; |
1911 void set_tokens(const TokenStream& value) const; | 1936 void set_tokens(const TokenStream& value) const; |
1912 static RawScript* New(); | 1937 static RawScript* New(); |
1913 | 1938 |
1914 HEAP_OBJECT_IMPLEMENTATION(Script, Object); | 1939 FINAL_HEAP_OBJECT_IMPLEMENTATION(Script, Object); |
1915 friend class Class; | 1940 friend class Class; |
1916 }; | 1941 }; |
1917 | 1942 |
1918 | 1943 |
1919 class DictionaryIterator : public ValueObject { | 1944 class DictionaryIterator : public ValueObject { |
1920 public: | 1945 public: |
1921 explicit DictionaryIterator(const Library& library); | 1946 explicit DictionaryIterator(const Library& library); |
1922 | 1947 |
1923 bool HasNext() const { return next_ix_ < size_; } | 1948 bool HasNext() const { return next_ix_ < size_; } |
1924 | 1949 |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2097 bool HasExports() const; | 2122 bool HasExports() const; |
2098 RawArray* loaded_scripts() const { return raw_ptr()->loaded_scripts_; } | 2123 RawArray* loaded_scripts() const { return raw_ptr()->loaded_scripts_; } |
2099 RawArray* dictionary() const { return raw_ptr()->dictionary_; } | 2124 RawArray* dictionary() const { return raw_ptr()->dictionary_; } |
2100 void InitClassDictionary() const; | 2125 void InitClassDictionary() const; |
2101 void InitImportList() const; | 2126 void InitImportList() const; |
2102 void GrowDictionary(const Array& dict, intptr_t dict_size) const; | 2127 void GrowDictionary(const Array& dict, intptr_t dict_size) const; |
2103 static RawLibrary* NewLibraryHelper(const String& url, | 2128 static RawLibrary* NewLibraryHelper(const String& url, |
2104 bool import_core_lib); | 2129 bool import_core_lib); |
2105 RawObject* LookupEntry(const String& name, intptr_t *index) const; | 2130 RawObject* LookupEntry(const String& name, intptr_t *index) const; |
2106 | 2131 |
2107 HEAP_OBJECT_IMPLEMENTATION(Library, Object); | 2132 FINAL_HEAP_OBJECT_IMPLEMENTATION(Library, Object); |
2108 friend class Class; | 2133 friend class Class; |
2109 friend class Debugger; | 2134 friend class Debugger; |
2110 friend class DictionaryIterator; | 2135 friend class DictionaryIterator; |
2111 friend class Isolate; | 2136 friend class Isolate; |
2112 friend class Namespace; | 2137 friend class Namespace; |
2113 }; | 2138 }; |
2114 | 2139 |
2115 | 2140 |
2116 class LibraryPrefix : public Object { | 2141 class LibraryPrefix : public Object { |
2117 public: | 2142 public: |
(...skipping 16 matching lines...) Expand all Loading... | |
2134 | 2159 |
2135 private: | 2160 private: |
2136 static const int kInitialSize = 2; | 2161 static const int kInitialSize = 2; |
2137 static const int kIncrementSize = 2; | 2162 static const int kIncrementSize = 2; |
2138 | 2163 |
2139 void set_name(const String& value) const; | 2164 void set_name(const String& value) const; |
2140 void set_imports(const Array& value) const; | 2165 void set_imports(const Array& value) const; |
2141 void set_num_imports(intptr_t value) const; | 2166 void set_num_imports(intptr_t value) const; |
2142 static RawLibraryPrefix* New(); | 2167 static RawLibraryPrefix* New(); |
2143 | 2168 |
2144 HEAP_OBJECT_IMPLEMENTATION(LibraryPrefix, Object); | 2169 FINAL_HEAP_OBJECT_IMPLEMENTATION(LibraryPrefix, Object); |
2145 friend class Class; | 2170 friend class Class; |
2146 friend class Isolate; | 2171 friend class Isolate; |
2147 }; | 2172 }; |
2148 | 2173 |
2149 | 2174 |
2150 class Namespace : public Object { | 2175 class Namespace : public Object { |
2151 public: | 2176 public: |
2152 RawLibrary* library() const { return raw_ptr()->library_; } | 2177 RawLibrary* library() const { return raw_ptr()->library_; } |
2153 RawArray* show_names() const { return raw_ptr()->show_names_; } | 2178 RawArray* show_names() const { return raw_ptr()->show_names_; } |
2154 RawArray* hide_names() const { return raw_ptr()->hide_names_; } | 2179 RawArray* hide_names() const { return raw_ptr()->hide_names_; } |
2155 | 2180 |
2156 static intptr_t InstanceSize() { | 2181 static intptr_t InstanceSize() { |
2157 return RoundedAllocationSize(sizeof(RawNamespace)); | 2182 return RoundedAllocationSize(sizeof(RawNamespace)); |
2158 } | 2183 } |
2159 | 2184 |
2160 bool HidesName(const String& name) const; | 2185 bool HidesName(const String& name) const; |
2161 RawObject* Lookup(const String& name) const; | 2186 RawObject* Lookup(const String& name) const; |
2162 | 2187 |
2163 static RawNamespace* New(const Library& library, | 2188 static RawNamespace* New(const Library& library, |
2164 const Array& show_names, | 2189 const Array& show_names, |
2165 const Array& hide_names); | 2190 const Array& hide_names); |
2166 private: | 2191 private: |
2167 static RawNamespace* New(); | 2192 static RawNamespace* New(); |
2168 | 2193 |
2169 HEAP_OBJECT_IMPLEMENTATION(Namespace, Object); | 2194 FINAL_HEAP_OBJECT_IMPLEMENTATION(Namespace, Object); |
2170 friend class Class; | 2195 friend class Class; |
2171 }; | 2196 }; |
2172 | 2197 |
2173 | 2198 |
2174 class Instructions : public Object { | 2199 class Instructions : public Object { |
2175 public: | 2200 public: |
2176 intptr_t size() const { return raw_ptr()->size_; } | 2201 intptr_t size() const { return raw_ptr()->size_; } |
2177 RawCode* code() const { return raw_ptr()->code_; } | 2202 RawCode* code() const { return raw_ptr()->code_; } |
2178 | 2203 |
2179 uword EntryPoint() const { | 2204 uword EntryPoint() const { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2215 void set_code(RawCode* code) { | 2240 void set_code(RawCode* code) { |
2216 raw_ptr()->code_ = code; | 2241 raw_ptr()->code_ = code; |
2217 } | 2242 } |
2218 | 2243 |
2219 // New is a private method as RawInstruction and RawCode objects should | 2244 // New is a private method as RawInstruction and RawCode objects should |
2220 // only be created using the Code::FinalizeCode method. This method creates | 2245 // only be created using the Code::FinalizeCode method. This method creates |
2221 // the RawInstruction and RawCode objects, sets up the pointer offsets | 2246 // the RawInstruction and RawCode objects, sets up the pointer offsets |
2222 // and links the two in a GC safe manner. | 2247 // and links the two in a GC safe manner. |
2223 static RawInstructions* New(intptr_t size); | 2248 static RawInstructions* New(intptr_t size); |
2224 | 2249 |
2225 HEAP_OBJECT_IMPLEMENTATION(Instructions, Object); | 2250 FINAL_HEAP_OBJECT_IMPLEMENTATION(Instructions, Object); |
2226 friend class Class; | 2251 friend class Class; |
2227 friend class Code; | 2252 friend class Code; |
2228 }; | 2253 }; |
2229 | 2254 |
2230 | 2255 |
2231 class LocalVarDescriptors : public Object { | 2256 class LocalVarDescriptors : public Object { |
2232 public: | 2257 public: |
2233 intptr_t Length() const; | 2258 intptr_t Length() const; |
2234 | 2259 |
2235 RawString* GetName(intptr_t var_index) const; | 2260 RawString* GetName(intptr_t var_index) const; |
(...skipping 15 matching lines...) Expand all Loading... | |
2251 } | 2276 } |
2252 static intptr_t InstanceSize(intptr_t len) { | 2277 static intptr_t InstanceSize(intptr_t len) { |
2253 ASSERT(0 <= len && len <= kMaxElements); | 2278 ASSERT(0 <= len && len <= kMaxElements); |
2254 return RoundedAllocationSize( | 2279 return RoundedAllocationSize( |
2255 sizeof(RawLocalVarDescriptors) + (len * kBytesPerElement)); | 2280 sizeof(RawLocalVarDescriptors) + (len * kBytesPerElement)); |
2256 } | 2281 } |
2257 | 2282 |
2258 static RawLocalVarDescriptors* New(intptr_t num_variables); | 2283 static RawLocalVarDescriptors* New(intptr_t num_variables); |
2259 | 2284 |
2260 private: | 2285 private: |
2261 HEAP_OBJECT_IMPLEMENTATION(LocalVarDescriptors, Object); | 2286 FINAL_HEAP_OBJECT_IMPLEMENTATION(LocalVarDescriptors, Object); |
2262 friend class Class; | 2287 friend class Class; |
2263 }; | 2288 }; |
2264 | 2289 |
2265 | 2290 |
2266 class PcDescriptors : public Object { | 2291 class PcDescriptors : public Object { |
2267 private: | 2292 private: |
2268 // Describes the layout of PC descriptor data. | 2293 // Describes the layout of PC descriptor data. |
2269 enum { | 2294 enum { |
2270 kPcEntry = 0, // PC value of the descriptor, unique. | 2295 kPcEntry = 0, // PC value of the descriptor, unique. |
2271 kKindEntry = 1, | 2296 kKindEntry = 1, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2349 | 2374 |
2350 intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const { | 2375 intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const { |
2351 ASSERT((index >=0) && (index < Length())); | 2376 ASSERT((index >=0) && (index < Length())); |
2352 intptr_t data_index = (index * kNumberOfEntries) + entry_offset; | 2377 intptr_t data_index = (index * kNumberOfEntries) + entry_offset; |
2353 return &raw_ptr()->data_[data_index]; | 2378 return &raw_ptr()->data_[data_index]; |
2354 } | 2379 } |
2355 RawSmi** SmiAddr(intptr_t index, intptr_t entry_offset) const { | 2380 RawSmi** SmiAddr(intptr_t index, intptr_t entry_offset) const { |
2356 return reinterpret_cast<RawSmi**>(EntryAddr(index, entry_offset)); | 2381 return reinterpret_cast<RawSmi**>(EntryAddr(index, entry_offset)); |
2357 } | 2382 } |
2358 | 2383 |
2359 HEAP_OBJECT_IMPLEMENTATION(PcDescriptors, Object); | 2384 FINAL_HEAP_OBJECT_IMPLEMENTATION(PcDescriptors, Object); |
2360 friend class Class; | 2385 friend class Class; |
2361 }; | 2386 }; |
2362 | 2387 |
2363 | 2388 |
2364 class Stackmap : public Object { | 2389 class Stackmap : public Object { |
2365 public: | 2390 public: |
2366 static const intptr_t kNoMaximum = -1; | 2391 static const intptr_t kNoMaximum = -1; |
2367 static const intptr_t kNoMinimum = -1; | 2392 static const intptr_t kNoMinimum = -1; |
2368 | 2393 |
2369 bool IsObject(intptr_t index) const { | 2394 bool IsObject(intptr_t index) const { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2402 intptr_t register_bit_count); | 2427 intptr_t register_bit_count); |
2403 | 2428 |
2404 private: | 2429 private: |
2405 void SetLength(intptr_t length) const { raw_ptr()->length_ = length; } | 2430 void SetLength(intptr_t length) const { raw_ptr()->length_ = length; } |
2406 | 2431 |
2407 bool InRange(intptr_t index) const { return index < Length(); } | 2432 bool InRange(intptr_t index) const { return index < Length(); } |
2408 | 2433 |
2409 bool GetBit(intptr_t bit_index) const; | 2434 bool GetBit(intptr_t bit_index) const; |
2410 void SetBit(intptr_t bit_index, bool value) const; | 2435 void SetBit(intptr_t bit_index, bool value) const; |
2411 | 2436 |
2412 HEAP_OBJECT_IMPLEMENTATION(Stackmap, Object); | 2437 FINAL_HEAP_OBJECT_IMPLEMENTATION(Stackmap, Object); |
2413 friend class BitmapBuilder; | 2438 friend class BitmapBuilder; |
2414 friend class Class; | 2439 friend class Class; |
2415 }; | 2440 }; |
2416 | 2441 |
2417 | 2442 |
2418 class ExceptionHandlers : public Object { | 2443 class ExceptionHandlers : public Object { |
2419 public: | 2444 public: |
2420 intptr_t Length() const; | 2445 intptr_t Length() const; |
2421 | 2446 |
2422 void GetHandlerInfo(intptr_t try_index, | 2447 void GetHandlerInfo(intptr_t try_index, |
(...skipping 25 matching lines...) Expand all Loading... | |
2448 // We would have a VisitPointers function here to traverse the | 2473 // We would have a VisitPointers function here to traverse the |
2449 // exception handler table to visit objects if any in the table. | 2474 // exception handler table to visit objects if any in the table. |
2450 | 2475 |
2451 private: | 2476 private: |
2452 // Pick somewhat arbitrary maximum number of exception handlers | 2477 // Pick somewhat arbitrary maximum number of exception handlers |
2453 // for a function. This value is used to catch potentially | 2478 // for a function. This value is used to catch potentially |
2454 // malicious code. | 2479 // malicious code. |
2455 static const intptr_t kMaxHandlers = 1024 * 1024; | 2480 static const intptr_t kMaxHandlers = 1024 * 1024; |
2456 | 2481 |
2457 void set_handled_types_data(const Array& value) const; | 2482 void set_handled_types_data(const Array& value) const; |
2458 HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers, Object); | 2483 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers, Object); |
2459 friend class Class; | 2484 friend class Class; |
2460 }; | 2485 }; |
2461 | 2486 |
2462 | 2487 |
2463 // Holds deopt information at one deoptimization point. The information | 2488 // Holds deopt information at one deoptimization point. The information |
2464 // is a list of DeoptInstr objects, specifying transformation information | 2489 // is a list of DeoptInstr objects, specifying transformation information |
2465 // for each slot in unoptimized frame(s). | 2490 // for each slot in unoptimized frame(s). |
2466 class DeoptInfo : public Object { | 2491 class DeoptInfo : public Object { |
2467 private: | 2492 private: |
2468 // Describes the layout of deopt info data. The index of a deopt-info entry | 2493 // Describes the layout of deopt info data. The index of a deopt-info entry |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2515 | 2540 |
2516 private: | 2541 private: |
2517 intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const { | 2542 intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const { |
2518 ASSERT((index >=0) && (index < Length())); | 2543 ASSERT((index >=0) && (index < Length())); |
2519 intptr_t data_index = (index * kNumberOfEntries) + entry_offset; | 2544 intptr_t data_index = (index * kNumberOfEntries) + entry_offset; |
2520 return &raw_ptr()->data_[data_index]; | 2545 return &raw_ptr()->data_[data_index]; |
2521 } | 2546 } |
2522 | 2547 |
2523 void SetLength(intptr_t value) const; | 2548 void SetLength(intptr_t value) const; |
2524 | 2549 |
2525 HEAP_OBJECT_IMPLEMENTATION(DeoptInfo, Object); | 2550 FINAL_HEAP_OBJECT_IMPLEMENTATION(DeoptInfo, Object); |
2526 friend class Class; | 2551 friend class Class; |
2527 }; | 2552 }; |
2528 | 2553 |
2529 | 2554 |
2530 class Code : public Object { | 2555 class Code : public Object { |
2531 public: | 2556 public: |
2532 RawInstructions* instructions() const { return raw_ptr()->instructions_; } | 2557 RawInstructions* instructions() const { return raw_ptr()->instructions_; } |
2533 static intptr_t instructions_offset() { | 2558 static intptr_t instructions_offset() { |
2534 return OFFSET_OF(RawCode, instructions_); | 2559 return OFFSET_OF(RawCode, instructions_); |
2535 } | 2560 } |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2748 *PointerOffsetAddrAt(index) = offset_in_instructions; | 2773 *PointerOffsetAddrAt(index) = offset_in_instructions; |
2749 } | 2774 } |
2750 | 2775 |
2751 | 2776 |
2752 // New is a private method as RawInstruction and RawCode objects should | 2777 // New is a private method as RawInstruction and RawCode objects should |
2753 // only be created using the Code::FinalizeCode method. This method creates | 2778 // only be created using the Code::FinalizeCode method. This method creates |
2754 // the RawInstruction and RawCode objects, sets up the pointer offsets | 2779 // the RawInstruction and RawCode objects, sets up the pointer offsets |
2755 // and links the two in a GC safe manner. | 2780 // and links the two in a GC safe manner. |
2756 static RawCode* New(intptr_t pointer_offsets_length); | 2781 static RawCode* New(intptr_t pointer_offsets_length); |
2757 | 2782 |
2758 HEAP_OBJECT_IMPLEMENTATION(Code, Object); | 2783 FINAL_HEAP_OBJECT_IMPLEMENTATION(Code, Object); |
2759 friend class Class; | 2784 friend class Class; |
2760 }; | 2785 }; |
2761 | 2786 |
2762 | 2787 |
2763 class Context : public Object { | 2788 class Context : public Object { |
2764 public: | 2789 public: |
2765 RawContext* parent() const { return raw_ptr()->parent_; } | 2790 RawContext* parent() const { return raw_ptr()->parent_; } |
2766 void set_parent(const Context& parent) const { | 2791 void set_parent(const Context& parent) const { |
2767 ASSERT(parent.IsNull() || parent.isolate() == Isolate::Current()); | 2792 ASSERT(parent.IsNull() || parent.isolate() == Isolate::Current()); |
2768 StorePointer(&raw_ptr()->parent_, parent.raw()); | 2793 StorePointer(&raw_ptr()->parent_, parent.raw()); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2809 } | 2834 } |
2810 | 2835 |
2811 void set_isolate(Isolate* isolate) const { | 2836 void set_isolate(Isolate* isolate) const { |
2812 raw_ptr()->isolate_ = isolate; | 2837 raw_ptr()->isolate_ = isolate; |
2813 } | 2838 } |
2814 | 2839 |
2815 void set_num_variables(intptr_t num_variables) const { | 2840 void set_num_variables(intptr_t num_variables) const { |
2816 raw_ptr()->num_variables_ = num_variables; | 2841 raw_ptr()->num_variables_ = num_variables; |
2817 } | 2842 } |
2818 | 2843 |
2819 HEAP_OBJECT_IMPLEMENTATION(Context, Object); | 2844 FINAL_HEAP_OBJECT_IMPLEMENTATION(Context, Object); |
2820 friend class Class; | 2845 friend class Class; |
2821 }; | 2846 }; |
2822 | 2847 |
2823 | 2848 |
2824 // The ContextScope class makes it possible to delay the compilation of a local | 2849 // The ContextScope class makes it possible to delay the compilation of a local |
2825 // function until it is invoked. A ContextScope instance collects the local | 2850 // function until it is invoked. A ContextScope instance collects the local |
2826 // variables that are referenced by the local function to be compiled and that | 2851 // variables that are referenced by the local function to be compiled and that |
2827 // belong to the outer scopes, that is, to the local scopes of (possibly nested) | 2852 // belong to the outer scopes, that is, to the local scopes of (possibly nested) |
2828 // functions enclosing the local function. Each captured variable is represented | 2853 // functions enclosing the local function. Each captured variable is represented |
2829 // by its token position in the source, its name, its type, its allocation index | 2854 // by its token position in the source, its name, its type, its allocation index |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2881 } | 2906 } |
2882 | 2907 |
2883 RawContextScope::VariableDesc* VariableDescAddr(intptr_t index) const { | 2908 RawContextScope::VariableDesc* VariableDescAddr(intptr_t index) const { |
2884 ASSERT((index >= 0) && (index < num_variables())); | 2909 ASSERT((index >= 0) && (index < num_variables())); |
2885 uword raw_addr = reinterpret_cast<uword>(raw_ptr()); | 2910 uword raw_addr = reinterpret_cast<uword>(raw_ptr()); |
2886 raw_addr += sizeof(RawContextScope) + | 2911 raw_addr += sizeof(RawContextScope) + |
2887 (index * sizeof(RawContextScope::VariableDesc)); | 2912 (index * sizeof(RawContextScope::VariableDesc)); |
2888 return reinterpret_cast<RawContextScope::VariableDesc*>(raw_addr); | 2913 return reinterpret_cast<RawContextScope::VariableDesc*>(raw_addr); |
2889 } | 2914 } |
2890 | 2915 |
2891 HEAP_OBJECT_IMPLEMENTATION(ContextScope, Object); | 2916 FINAL_HEAP_OBJECT_IMPLEMENTATION(ContextScope, Object); |
2892 friend class Class; | 2917 friend class Class; |
2893 }; | 2918 }; |
2894 | 2919 |
2895 | 2920 |
2896 // Object holding information about an IC: test classes and their | 2921 // Object holding information about an IC: test classes and their |
2897 // corresponding targets. | 2922 // corresponding targets. |
2898 class ICData : public Object { | 2923 class ICData : public Object { |
2899 public: | 2924 public: |
2900 RawFunction* function() const { | 2925 RawFunction* function() const { |
2901 return raw_ptr()->function_; | 2926 return raw_ptr()->function_; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3018 void set_ic_data(const Array& value) const; | 3043 void set_ic_data(const Array& value) const; |
3019 | 3044 |
3020 #if defined(DEBUG) | 3045 #if defined(DEBUG) |
3021 // Used in asserts to verify that a check is not added twice. | 3046 // Used in asserts to verify that a check is not added twice. |
3022 bool HasCheck(const GrowableArray<intptr_t>& cids) const; | 3047 bool HasCheck(const GrowableArray<intptr_t>& cids) const; |
3023 #endif // DEBUG | 3048 #endif // DEBUG |
3024 | 3049 |
3025 intptr_t TestEntryLength() const; | 3050 intptr_t TestEntryLength() const; |
3026 void WriteSentinel() const; | 3051 void WriteSentinel() const; |
3027 | 3052 |
3028 HEAP_OBJECT_IMPLEMENTATION(ICData, Object); | 3053 FINAL_HEAP_OBJECT_IMPLEMENTATION(ICData, Object); |
3029 friend class Class; | 3054 friend class Class; |
3030 }; | 3055 }; |
3031 | 3056 |
3032 | 3057 |
3033 class MegamorphicCache : public Object { | 3058 class MegamorphicCache : public Object { |
3034 public: | 3059 public: |
3035 static const int kInitialCapacity = 16; | 3060 static const int kInitialCapacity = 16; |
3036 static const double kLoadFactor; | 3061 static const double kLoadFactor; |
3037 | 3062 |
3038 RawArray* buckets() const; | 3063 RawArray* buckets() const; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3072 | 3097 |
3073 static inline void SetEntry(const Array& array, | 3098 static inline void SetEntry(const Array& array, |
3074 intptr_t index, | 3099 intptr_t index, |
3075 const Smi& class_id, | 3100 const Smi& class_id, |
3076 const Function& target); | 3101 const Function& target); |
3077 | 3102 |
3078 static inline RawObject* GetClassId(const Array& array, intptr_t index); | 3103 static inline RawObject* GetClassId(const Array& array, intptr_t index); |
3079 static inline RawObject* GetTargetFunction(const Array& array, | 3104 static inline RawObject* GetTargetFunction(const Array& array, |
3080 intptr_t index); | 3105 intptr_t index); |
3081 | 3106 |
3082 HEAP_OBJECT_IMPLEMENTATION(MegamorphicCache, Object); | 3107 FINAL_HEAP_OBJECT_IMPLEMENTATION(MegamorphicCache, Object); |
3083 }; | 3108 }; |
3084 | 3109 |
3085 | 3110 |
3086 class SubtypeTestCache : public Object { | 3111 class SubtypeTestCache : public Object { |
3087 public: | 3112 public: |
3088 enum Entries { | 3113 enum Entries { |
3089 kInstanceClassId = 0, | 3114 kInstanceClassId = 0, |
3090 kInstanceTypeArguments = 1, | 3115 kInstanceTypeArguments = 1, |
3091 kInstantiatorTypeArguments = 2, | 3116 kInstantiatorTypeArguments = 2, |
3092 kTestResult = 3, | 3117 kTestResult = 3, |
(...skipping 23 matching lines...) Expand all Loading... | |
3116 | 3141 |
3117 private: | 3142 private: |
3118 RawArray* cache() const { | 3143 RawArray* cache() const { |
3119 return raw_ptr()->cache_; | 3144 return raw_ptr()->cache_; |
3120 } | 3145 } |
3121 | 3146 |
3122 void set_cache(const Array& value) const; | 3147 void set_cache(const Array& value) const; |
3123 | 3148 |
3124 intptr_t TestEntryLength() const; | 3149 intptr_t TestEntryLength() const; |
3125 | 3150 |
3126 HEAP_OBJECT_IMPLEMENTATION(SubtypeTestCache, Object); | 3151 FINAL_HEAP_OBJECT_IMPLEMENTATION(SubtypeTestCache, Object); |
3127 friend class Class; | 3152 friend class Class; |
3128 }; | 3153 }; |
3129 | 3154 |
3130 | 3155 |
3131 class Error : public Object { | 3156 class Error : public Object { |
3132 public: | 3157 public: |
3133 virtual const char* ToErrorCString() const; | 3158 virtual const char* ToErrorCString() const; |
3134 | 3159 |
3135 private: | 3160 private: |
3136 HEAP_OBJECT_IMPLEMENTATION(Error, Object); | 3161 HEAP_OBJECT_IMPLEMENTATION(Error, Object); |
(...skipping 13 matching lines...) Expand all Loading... | |
3150 | 3175 |
3151 static RawApiError* New(const String& message, | 3176 static RawApiError* New(const String& message, |
3152 Heap::Space space = Heap::kNew); | 3177 Heap::Space space = Heap::kNew); |
3153 | 3178 |
3154 virtual const char* ToErrorCString() const; | 3179 virtual const char* ToErrorCString() const; |
3155 | 3180 |
3156 private: | 3181 private: |
3157 void set_message(const String& message) const; | 3182 void set_message(const String& message) const; |
3158 static RawApiError* New(); | 3183 static RawApiError* New(); |
3159 | 3184 |
3160 HEAP_OBJECT_IMPLEMENTATION(ApiError, Error); | 3185 FINAL_HEAP_OBJECT_IMPLEMENTATION(ApiError, Error); |
3161 friend class Class; | 3186 friend class Class; |
3162 }; | 3187 }; |
3163 | 3188 |
3164 | 3189 |
3165 class LanguageError : public Error { | 3190 class LanguageError : public Error { |
3166 public: | 3191 public: |
3167 RawString* message() const { return raw_ptr()->message_; } | 3192 RawString* message() const { return raw_ptr()->message_; } |
3168 static intptr_t message_offset() { | 3193 static intptr_t message_offset() { |
3169 return OFFSET_OF(RawLanguageError, message_); | 3194 return OFFSET_OF(RawLanguageError, message_); |
3170 } | 3195 } |
3171 | 3196 |
3172 static intptr_t InstanceSize() { | 3197 static intptr_t InstanceSize() { |
3173 return RoundedAllocationSize(sizeof(RawLanguageError)); | 3198 return RoundedAllocationSize(sizeof(RawLanguageError)); |
3174 } | 3199 } |
3175 | 3200 |
3176 static RawLanguageError* New(const String& message, | 3201 static RawLanguageError* New(const String& message, |
3177 Heap::Space space = Heap::kNew); | 3202 Heap::Space space = Heap::kNew); |
3178 | 3203 |
3179 virtual const char* ToErrorCString() const; | 3204 virtual const char* ToErrorCString() const; |
3180 | 3205 |
3181 private: | 3206 private: |
3182 void set_message(const String& message) const; | 3207 void set_message(const String& message) const; |
3183 static RawLanguageError* New(); | 3208 static RawLanguageError* New(); |
3184 | 3209 |
3185 HEAP_OBJECT_IMPLEMENTATION(LanguageError, Error); | 3210 FINAL_HEAP_OBJECT_IMPLEMENTATION(LanguageError, Error); |
3186 friend class Class; | 3211 friend class Class; |
3187 }; | 3212 }; |
3188 | 3213 |
3189 | 3214 |
3190 class UnhandledException : public Error { | 3215 class UnhandledException : public Error { |
3191 public: | 3216 public: |
3192 RawInstance* exception() const { return raw_ptr()->exception_; } | 3217 RawInstance* exception() const { return raw_ptr()->exception_; } |
3193 static intptr_t exception_offset() { | 3218 static intptr_t exception_offset() { |
3194 return OFFSET_OF(RawUnhandledException, exception_); | 3219 return OFFSET_OF(RawUnhandledException, exception_); |
3195 } | 3220 } |
(...skipping 10 matching lines...) Expand all Loading... | |
3206 static RawUnhandledException* New(const Instance& exception, | 3231 static RawUnhandledException* New(const Instance& exception, |
3207 const Instance& stacktrace, | 3232 const Instance& stacktrace, |
3208 Heap::Space space = Heap::kNew); | 3233 Heap::Space space = Heap::kNew); |
3209 | 3234 |
3210 virtual const char* ToErrorCString() const; | 3235 virtual const char* ToErrorCString() const; |
3211 | 3236 |
3212 private: | 3237 private: |
3213 void set_exception(const Instance& exception) const; | 3238 void set_exception(const Instance& exception) const; |
3214 void set_stacktrace(const Instance& stacktrace) const; | 3239 void set_stacktrace(const Instance& stacktrace) const; |
3215 | 3240 |
3216 HEAP_OBJECT_IMPLEMENTATION(UnhandledException, Error); | 3241 FINAL_HEAP_OBJECT_IMPLEMENTATION(UnhandledException, Error); |
3217 friend class Class; | 3242 friend class Class; |
3218 }; | 3243 }; |
3219 | 3244 |
3220 | 3245 |
3221 class UnwindError : public Error { | 3246 class UnwindError : public Error { |
3222 public: | 3247 public: |
3223 RawString* message() const { return raw_ptr()->message_; } | 3248 RawString* message() const { return raw_ptr()->message_; } |
3224 static intptr_t message_offset() { | 3249 static intptr_t message_offset() { |
3225 return OFFSET_OF(RawUnwindError, message_); | 3250 return OFFSET_OF(RawUnwindError, message_); |
3226 } | 3251 } |
3227 | 3252 |
3228 static intptr_t InstanceSize() { | 3253 static intptr_t InstanceSize() { |
3229 return RoundedAllocationSize(sizeof(RawUnwindError)); | 3254 return RoundedAllocationSize(sizeof(RawUnwindError)); |
3230 } | 3255 } |
3231 | 3256 |
3232 static RawUnwindError* New(const String& message, | 3257 static RawUnwindError* New(const String& message, |
3233 Heap::Space space = Heap::kNew); | 3258 Heap::Space space = Heap::kNew); |
3234 | 3259 |
3235 virtual const char* ToErrorCString() const; | 3260 virtual const char* ToErrorCString() const; |
3236 | 3261 |
3237 private: | 3262 private: |
3238 void set_message(const String& message) const; | 3263 void set_message(const String& message) const; |
3239 | 3264 |
3240 HEAP_OBJECT_IMPLEMENTATION(UnwindError, Error); | 3265 FINAL_HEAP_OBJECT_IMPLEMENTATION(UnwindError, Error); |
3241 friend class Class; | 3266 friend class Class; |
3242 }; | 3267 }; |
3243 | 3268 |
3244 | 3269 |
3245 // Instance is the base class for all instance objects (aka the Object class | 3270 // Instance is the base class for all instance objects (aka the Object class |
3246 // in Dart source code. | 3271 // in Dart source code. |
3247 class Instance : public Object { | 3272 class Instance : public Object { |
3248 public: | 3273 public: |
3249 virtual bool Equals(const Instance& other) const; | 3274 virtual bool Equals(const Instance& other) const; |
3250 virtual RawInstance* Canonicalize() const; | 3275 virtual RawInstance* Canonicalize() const; |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3729 static RawMint* New(int64_t value, Heap::Space space = Heap::kNew); | 3754 static RawMint* New(int64_t value, Heap::Space space = Heap::kNew); |
3730 static RawMint* NewCanonical(int64_t value); | 3755 static RawMint* NewCanonical(int64_t value); |
3731 | 3756 |
3732 static intptr_t InstanceSize() { | 3757 static intptr_t InstanceSize() { |
3733 return RoundedAllocationSize(sizeof(RawMint)); | 3758 return RoundedAllocationSize(sizeof(RawMint)); |
3734 } | 3759 } |
3735 | 3760 |
3736 private: | 3761 private: |
3737 void set_value(int64_t value) const; | 3762 void set_value(int64_t value) const; |
3738 | 3763 |
3739 HEAP_OBJECT_IMPLEMENTATION(Mint, Integer); | 3764 FINAL_HEAP_OBJECT_IMPLEMENTATION(Mint, Integer); |
3740 friend class Class; | 3765 friend class Class; |
3741 }; | 3766 }; |
3742 | 3767 |
3743 | 3768 |
3744 class Bigint : public Integer { | 3769 class Bigint : public Integer { |
3745 private: | 3770 private: |
3746 typedef uint32_t Chunk; | 3771 typedef uint32_t Chunk; |
3747 typedef uint64_t DoubleChunk; | 3772 typedef uint64_t DoubleChunk; |
3748 static const int kChunkSize = sizeof(Chunk); | 3773 static const int kChunkSize = sizeof(Chunk); |
3749 | 3774 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3810 | 3835 |
3811 Chunk* ChunkAddr(intptr_t index) const { | 3836 Chunk* ChunkAddr(intptr_t index) const { |
3812 ASSERT(0 <= index); | 3837 ASSERT(0 <= index); |
3813 ASSERT(index < Length()); | 3838 ASSERT(index < Length()); |
3814 uword digits_start = reinterpret_cast<uword>(raw_ptr()) + sizeof(RawBigint); | 3839 uword digits_start = reinterpret_cast<uword>(raw_ptr()) + sizeof(RawBigint); |
3815 return &(reinterpret_cast<Chunk*>(digits_start)[index]); | 3840 return &(reinterpret_cast<Chunk*>(digits_start)[index]); |
3816 } | 3841 } |
3817 | 3842 |
3818 static RawBigint* Allocate(intptr_t length, Heap::Space space = Heap::kNew); | 3843 static RawBigint* Allocate(intptr_t length, Heap::Space space = Heap::kNew); |
3819 | 3844 |
3820 HEAP_OBJECT_IMPLEMENTATION(Bigint, Integer); | 3845 FINAL_HEAP_OBJECT_IMPLEMENTATION(Bigint, Integer); |
3821 friend class BigintOperations; | 3846 friend class BigintOperations; |
3822 friend class Class; | 3847 friend class Class; |
3823 }; | 3848 }; |
3824 | 3849 |
3825 | 3850 |
3826 // Class Double represents class Double in corelib_impl, which implements | 3851 // Class Double represents class Double in corelib_impl, which implements |
3827 // abstract class double in corelib. | 3852 // abstract class double in corelib. |
3828 class Double : public Number { | 3853 class Double : public Number { |
3829 public: | 3854 public: |
3830 double value() const { | 3855 double value() const { |
(...skipping 17 matching lines...) Expand all Loading... | |
3848 | 3873 |
3849 static intptr_t InstanceSize() { | 3874 static intptr_t InstanceSize() { |
3850 return RoundedAllocationSize(sizeof(RawDouble)); | 3875 return RoundedAllocationSize(sizeof(RawDouble)); |
3851 } | 3876 } |
3852 | 3877 |
3853 static intptr_t value_offset() { return OFFSET_OF(RawDouble, value_); } | 3878 static intptr_t value_offset() { return OFFSET_OF(RawDouble, value_); } |
3854 | 3879 |
3855 private: | 3880 private: |
3856 void set_value(double value) const; | 3881 void set_value(double value) const; |
3857 | 3882 |
3858 HEAP_OBJECT_IMPLEMENTATION(Double, Number); | 3883 FINAL_HEAP_OBJECT_IMPLEMENTATION(Double, Number); |
3859 friend class Class; | 3884 friend class Class; |
3860 }; | 3885 }; |
3861 | 3886 |
3862 | 3887 |
3863 // String may not be '\0' terminated. | 3888 // String may not be '\0' terminated. |
3864 class String : public Instance { | 3889 class String : public Instance { |
3865 public: | 3890 public: |
3866 // We use 30 bits for the hash code so that we consistently use a | 3891 // We use 30 bits for the hash code so that we consistently use a |
3867 // 32bit Smi representation for the hash code on all architectures. | 3892 // 32bit Smi representation for the hash code on all architectures. |
3868 static const intptr_t kHashBits = 30; | 3893 static const intptr_t kHashBits = 30; |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4101 } | 4126 } |
4102 | 4127 |
4103 template<typename HandleType, typename ElementType, typename CallbackType> | 4128 template<typename HandleType, typename ElementType, typename CallbackType> |
4104 static void ReadFromImpl(SnapshotReader* reader, | 4129 static void ReadFromImpl(SnapshotReader* reader, |
4105 String* str_obj, | 4130 String* str_obj, |
4106 intptr_t len, | 4131 intptr_t len, |
4107 intptr_t tags, | 4132 intptr_t tags, |
4108 CallbackType new_symbol, | 4133 CallbackType new_symbol, |
4109 Snapshot::Kind kind); | 4134 Snapshot::Kind kind); |
4110 | 4135 |
4111 HEAP_OBJECT_IMPLEMENTATION(String, Instance); | 4136 FINAL_HEAP_OBJECT_IMPLEMENTATION(String, Instance); |
4112 | 4137 |
4113 friend class Class; | 4138 friend class Class; |
4114 friend class Symbols; | 4139 friend class Symbols; |
4115 friend class OneByteString; | 4140 friend class OneByteString; |
4116 friend class TwoByteString; | 4141 friend class TwoByteString; |
4117 friend class ExternalOneByteString; | 4142 friend class ExternalOneByteString; |
4118 friend class ExternalTwoByteString; | 4143 friend class ExternalTwoByteString; |
4119 }; | 4144 }; |
4120 | 4145 |
4121 | 4146 |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4463 static RawBool* Get(bool value) { | 4488 static RawBool* Get(bool value) { |
4464 return value ? Bool::True().raw() : Bool::False().raw(); | 4489 return value ? Bool::True().raw() : Bool::False().raw(); |
4465 } | 4490 } |
4466 | 4491 |
4467 private: | 4492 private: |
4468 void set_value(bool value) const { raw_ptr()->value_ = value; } | 4493 void set_value(bool value) const { raw_ptr()->value_ = value; } |
4469 | 4494 |
4470 // New should only be called to initialize the two legal bool values. | 4495 // New should only be called to initialize the two legal bool values. |
4471 static RawBool* New(bool value); | 4496 static RawBool* New(bool value); |
4472 | 4497 |
4473 HEAP_OBJECT_IMPLEMENTATION(Bool, Instance); | 4498 FINAL_HEAP_OBJECT_IMPLEMENTATION(Bool, Instance); |
4474 friend class Class; | 4499 friend class Class; |
4475 friend class Object; // To initialize the true and false values. | 4500 friend class Object; // To initialize the true and false values. |
4476 }; | 4501 }; |
4477 | 4502 |
4478 | 4503 |
4479 class Array : public Instance { | 4504 class Array : public Instance { |
4480 public: | 4505 public: |
4481 intptr_t Length() const { | 4506 intptr_t Length() const { |
4482 ASSERT(!IsNull()); | 4507 ASSERT(!IsNull()); |
4483 return Smi::Value(raw_ptr()->length_); | 4508 return Smi::Value(raw_ptr()->length_); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4567 friend class Class; | 4592 friend class Class; |
4568 friend class String; | 4593 friend class String; |
4569 }; | 4594 }; |
4570 | 4595 |
4571 | 4596 |
4572 class ImmutableArray : public Array { | 4597 class ImmutableArray : public Array { |
4573 public: | 4598 public: |
4574 static RawImmutableArray* New(intptr_t len, Heap::Space space = Heap::kNew); | 4599 static RawImmutableArray* New(intptr_t len, Heap::Space space = Heap::kNew); |
4575 | 4600 |
4576 private: | 4601 private: |
4577 HEAP_OBJECT_IMPLEMENTATION(ImmutableArray, Array); | 4602 FINAL_HEAP_OBJECT_IMPLEMENTATION(ImmutableArray, Array); |
4578 friend class Class; | 4603 friend class Class; |
4579 }; | 4604 }; |
4580 | 4605 |
4581 | 4606 |
4582 class GrowableObjectArray : public Instance { | 4607 class GrowableObjectArray : public Instance { |
4583 public: | 4608 public: |
4584 intptr_t Capacity() const { | 4609 intptr_t Capacity() const { |
4585 NoGCScope no_gc; | 4610 NoGCScope no_gc; |
4586 ASSERT(!IsNull()); | 4611 ASSERT(!IsNull()); |
4587 return Smi::Value(DataArray()->length_); | 4612 return Smi::Value(DataArray()->length_); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4676 // Filter stores based on source and target. | 4701 // Filter stores based on source and target. |
4677 if (!value->IsHeapObject()) return; | 4702 if (!value->IsHeapObject()) return; |
4678 if (value->IsNewObject() && data()->IsOldObject()) { | 4703 if (value->IsNewObject() && data()->IsOldObject()) { |
4679 uword ptr = reinterpret_cast<uword>(addr); | 4704 uword ptr = reinterpret_cast<uword>(addr); |
4680 Isolate::Current()->store_buffer()->AddPointer(ptr); | 4705 Isolate::Current()->store_buffer()->AddPointer(ptr); |
4681 } | 4706 } |
4682 } | 4707 } |
4683 | 4708 |
4684 static const int kDefaultInitialCapacity = 4; | 4709 static const int kDefaultInitialCapacity = 4; |
4685 | 4710 |
4686 HEAP_OBJECT_IMPLEMENTATION(GrowableObjectArray, Instance); | 4711 FINAL_HEAP_OBJECT_IMPLEMENTATION(GrowableObjectArray, Instance); |
4687 friend class Array; | 4712 friend class Array; |
4688 friend class Class; | 4713 friend class Class; |
4689 }; | 4714 }; |
4690 | 4715 |
4691 | 4716 |
4692 class ByteArray : public Instance { | 4717 class ByteArray : public Instance { |
4693 public: | 4718 public: |
4694 intptr_t Length() const { | 4719 intptr_t Length() const { |
4695 ASSERT(!IsNull()); | 4720 ASSERT(!IsNull()); |
4696 return Smi::Value(raw_ptr()->length_); | 4721 return Smi::Value(raw_ptr()->length_); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4795 static RawInt8Array* New(const int8_t* data, | 4820 static RawInt8Array* New(const int8_t* data, |
4796 intptr_t len, | 4821 intptr_t len, |
4797 Heap::Space space = Heap::kNew); | 4822 Heap::Space space = Heap::kNew); |
4798 | 4823 |
4799 private: | 4824 private: |
4800 uint8_t* ByteAddr(intptr_t byte_offset) const { | 4825 uint8_t* ByteAddr(intptr_t byte_offset) const { |
4801 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 4826 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
4802 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 4827 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
4803 } | 4828 } |
4804 | 4829 |
4805 HEAP_OBJECT_IMPLEMENTATION(Int8Array, ByteArray); | 4830 FINAL_HEAP_OBJECT_IMPLEMENTATION(Int8Array, ByteArray); |
4806 friend class ByteArray; | 4831 friend class ByteArray; |
4807 friend class Class; | 4832 friend class Class; |
4808 }; | 4833 }; |
4809 | 4834 |
4810 | 4835 |
4811 class Uint8Array : public ByteArray { | 4836 class Uint8Array : public ByteArray { |
4812 public: | 4837 public: |
4813 intptr_t ByteLength() const { | 4838 intptr_t ByteLength() const { |
4814 return Length(); | 4839 return Length(); |
4815 } | 4840 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4847 static RawUint8Array* New(const uint8_t* data, | 4872 static RawUint8Array* New(const uint8_t* data, |
4848 intptr_t len, | 4873 intptr_t len, |
4849 Heap::Space space = Heap::kNew); | 4874 Heap::Space space = Heap::kNew); |
4850 | 4875 |
4851 private: | 4876 private: |
4852 uint8_t* ByteAddr(intptr_t byte_offset) const { | 4877 uint8_t* ByteAddr(intptr_t byte_offset) const { |
4853 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 4878 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
4854 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 4879 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
4855 } | 4880 } |
4856 | 4881 |
4857 HEAP_OBJECT_IMPLEMENTATION(Uint8Array, ByteArray); | 4882 FINAL_HEAP_OBJECT_IMPLEMENTATION(Uint8Array, ByteArray); |
4858 friend class ByteArray; | 4883 friend class ByteArray; |
4859 friend class Class; | 4884 friend class Class; |
4860 }; | 4885 }; |
4861 | 4886 |
4862 | 4887 |
4863 class Uint8ClampedArray : public ByteArray { | 4888 class Uint8ClampedArray : public ByteArray { |
4864 public: | 4889 public: |
4865 intptr_t ByteLength() const { | 4890 intptr_t ByteLength() const { |
4866 return Length(); | 4891 return Length(); |
4867 } | 4892 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4900 static RawUint8ClampedArray* New(const uint8_t* data, | 4925 static RawUint8ClampedArray* New(const uint8_t* data, |
4901 intptr_t len, | 4926 intptr_t len, |
4902 Heap::Space space = Heap::kNew); | 4927 Heap::Space space = Heap::kNew); |
4903 | 4928 |
4904 private: | 4929 private: |
4905 uint8_t* ByteAddr(intptr_t byte_offset) const { | 4930 uint8_t* ByteAddr(intptr_t byte_offset) const { |
4906 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 4931 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
4907 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 4932 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
4908 } | 4933 } |
4909 | 4934 |
4910 HEAP_OBJECT_IMPLEMENTATION(Uint8ClampedArray, ByteArray); | 4935 FINAL_HEAP_OBJECT_IMPLEMENTATION(Uint8ClampedArray, ByteArray); |
4911 friend class ByteArray; | 4936 friend class ByteArray; |
4912 friend class Class; | 4937 friend class Class; |
4913 }; | 4938 }; |
4914 | 4939 |
4915 | 4940 |
4916 class Int16Array : public ByteArray { | 4941 class Int16Array : public ByteArray { |
4917 public: | 4942 public: |
4918 intptr_t ByteLength() const { | 4943 intptr_t ByteLength() const { |
4919 return Length() * kBytesPerElement; | 4944 return Length() * kBytesPerElement; |
4920 } | 4945 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4952 static RawInt16Array* New(const int16_t* data, | 4977 static RawInt16Array* New(const int16_t* data, |
4953 intptr_t len, | 4978 intptr_t len, |
4954 Heap::Space space = Heap::kNew); | 4979 Heap::Space space = Heap::kNew); |
4955 | 4980 |
4956 private: | 4981 private: |
4957 uint8_t* ByteAddr(intptr_t byte_offset) const { | 4982 uint8_t* ByteAddr(intptr_t byte_offset) const { |
4958 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 4983 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
4959 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 4984 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
4960 } | 4985 } |
4961 | 4986 |
4962 HEAP_OBJECT_IMPLEMENTATION(Int16Array, ByteArray); | 4987 FINAL_HEAP_OBJECT_IMPLEMENTATION(Int16Array, ByteArray); |
4963 friend class ByteArray; | 4988 friend class ByteArray; |
4964 friend class Class; | 4989 friend class Class; |
4965 }; | 4990 }; |
4966 | 4991 |
4967 | 4992 |
4968 class Uint16Array : public ByteArray { | 4993 class Uint16Array : public ByteArray { |
4969 public: | 4994 public: |
4970 intptr_t ByteLength() const { | 4995 intptr_t ByteLength() const { |
4971 return Length() * kBytesPerElement; | 4996 return Length() * kBytesPerElement; |
4972 } | 4997 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5004 static RawUint16Array* New(const uint16_t* data, | 5029 static RawUint16Array* New(const uint16_t* data, |
5005 intptr_t len, | 5030 intptr_t len, |
5006 Heap::Space space = Heap::kNew); | 5031 Heap::Space space = Heap::kNew); |
5007 | 5032 |
5008 private: | 5033 private: |
5009 uint8_t* ByteAddr(intptr_t byte_offset) const { | 5034 uint8_t* ByteAddr(intptr_t byte_offset) const { |
5010 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5035 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5011 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 5036 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
5012 } | 5037 } |
5013 | 5038 |
5014 HEAP_OBJECT_IMPLEMENTATION(Uint16Array, ByteArray); | 5039 FINAL_HEAP_OBJECT_IMPLEMENTATION(Uint16Array, ByteArray); |
5015 friend class ByteArray; | 5040 friend class ByteArray; |
5016 friend class Class; | 5041 friend class Class; |
5017 }; | 5042 }; |
5018 | 5043 |
5019 | 5044 |
5020 class Int32Array : public ByteArray { | 5045 class Int32Array : public ByteArray { |
5021 public: | 5046 public: |
5022 intptr_t ByteLength() const { | 5047 intptr_t ByteLength() const { |
5023 return Length() * kBytesPerElement; | 5048 return Length() * kBytesPerElement; |
5024 } | 5049 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5056 static RawInt32Array* New(const int32_t* data, | 5081 static RawInt32Array* New(const int32_t* data, |
5057 intptr_t len, | 5082 intptr_t len, |
5058 Heap::Space space = Heap::kNew); | 5083 Heap::Space space = Heap::kNew); |
5059 | 5084 |
5060 private: | 5085 private: |
5061 uint8_t* ByteAddr(intptr_t byte_offset) const { | 5086 uint8_t* ByteAddr(intptr_t byte_offset) const { |
5062 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5087 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5063 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 5088 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
5064 } | 5089 } |
5065 | 5090 |
5066 HEAP_OBJECT_IMPLEMENTATION(Int32Array, ByteArray); | 5091 FINAL_HEAP_OBJECT_IMPLEMENTATION(Int32Array, ByteArray); |
5067 friend class ByteArray; | 5092 friend class ByteArray; |
5068 friend class Class; | 5093 friend class Class; |
5069 }; | 5094 }; |
5070 | 5095 |
5071 | 5096 |
5072 class Uint32Array : public ByteArray { | 5097 class Uint32Array : public ByteArray { |
5073 public: | 5098 public: |
5074 intptr_t ByteLength() const { | 5099 intptr_t ByteLength() const { |
5075 return Length() * kBytesPerElement; | 5100 return Length() * kBytesPerElement; |
5076 } | 5101 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5108 static RawUint32Array* New(const uint32_t* data, | 5133 static RawUint32Array* New(const uint32_t* data, |
5109 intptr_t len, | 5134 intptr_t len, |
5110 Heap::Space space = Heap::kNew); | 5135 Heap::Space space = Heap::kNew); |
5111 | 5136 |
5112 private: | 5137 private: |
5113 uint8_t* ByteAddr(intptr_t byte_offset) const { | 5138 uint8_t* ByteAddr(intptr_t byte_offset) const { |
5114 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5139 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5115 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 5140 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
5116 } | 5141 } |
5117 | 5142 |
5118 HEAP_OBJECT_IMPLEMENTATION(Uint32Array, ByteArray); | 5143 FINAL_HEAP_OBJECT_IMPLEMENTATION(Uint32Array, ByteArray); |
5119 friend class ByteArray; | 5144 friend class ByteArray; |
5120 friend class Class; | 5145 friend class Class; |
5121 }; | 5146 }; |
5122 | 5147 |
5123 | 5148 |
5124 class Int64Array : public ByteArray { | 5149 class Int64Array : public ByteArray { |
5125 public: | 5150 public: |
5126 intptr_t ByteLength() const { | 5151 intptr_t ByteLength() const { |
5127 return Length() * kBytesPerElement; | 5152 return Length() * kBytesPerElement; |
5128 } | 5153 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5160 static RawInt64Array* New(const int64_t* data, | 5185 static RawInt64Array* New(const int64_t* data, |
5161 intptr_t len, | 5186 intptr_t len, |
5162 Heap::Space space = Heap::kNew); | 5187 Heap::Space space = Heap::kNew); |
5163 | 5188 |
5164 private: | 5189 private: |
5165 uint8_t* ByteAddr(intptr_t byte_offset) const { | 5190 uint8_t* ByteAddr(intptr_t byte_offset) const { |
5166 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5191 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5167 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 5192 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
5168 } | 5193 } |
5169 | 5194 |
5170 HEAP_OBJECT_IMPLEMENTATION(Int64Array, ByteArray); | 5195 FINAL_HEAP_OBJECT_IMPLEMENTATION(Int64Array, ByteArray); |
5171 friend class ByteArray; | 5196 friend class ByteArray; |
5172 friend class Class; | 5197 friend class Class; |
5173 }; | 5198 }; |
5174 | 5199 |
5175 | 5200 |
5176 class Uint64Array : public ByteArray { | 5201 class Uint64Array : public ByteArray { |
5177 public: | 5202 public: |
5178 intptr_t ByteLength() const { | 5203 intptr_t ByteLength() const { |
5179 return Length() * sizeof(uint64_t); | 5204 return Length() * sizeof(uint64_t); |
5180 } | 5205 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5212 static RawUint64Array* New(const uint64_t* data, | 5237 static RawUint64Array* New(const uint64_t* data, |
5213 intptr_t len, | 5238 intptr_t len, |
5214 Heap::Space space = Heap::kNew); | 5239 Heap::Space space = Heap::kNew); |
5215 | 5240 |
5216 private: | 5241 private: |
5217 uint8_t* ByteAddr(intptr_t byte_offset) const { | 5242 uint8_t* ByteAddr(intptr_t byte_offset) const { |
5218 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5243 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5219 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 5244 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
5220 } | 5245 } |
5221 | 5246 |
5222 HEAP_OBJECT_IMPLEMENTATION(Uint64Array, ByteArray); | 5247 FINAL_HEAP_OBJECT_IMPLEMENTATION(Uint64Array, ByteArray); |
5223 friend class ByteArray; | 5248 friend class ByteArray; |
5224 friend class Class; | 5249 friend class Class; |
5225 }; | 5250 }; |
5226 | 5251 |
5227 | 5252 |
5228 class Float32Array : public ByteArray { | 5253 class Float32Array : public ByteArray { |
5229 public: | 5254 public: |
5230 intptr_t ByteLength() const { | 5255 intptr_t ByteLength() const { |
5231 return Length() * kBytesPerElement; | 5256 return Length() * kBytesPerElement; |
5232 } | 5257 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5264 static RawFloat32Array* New(const float* data, | 5289 static RawFloat32Array* New(const float* data, |
5265 intptr_t len, | 5290 intptr_t len, |
5266 Heap::Space space = Heap::kNew); | 5291 Heap::Space space = Heap::kNew); |
5267 | 5292 |
5268 private: | 5293 private: |
5269 uint8_t* ByteAddr(intptr_t byte_offset) const { | 5294 uint8_t* ByteAddr(intptr_t byte_offset) const { |
5270 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5295 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5271 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 5296 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
5272 } | 5297 } |
5273 | 5298 |
5274 HEAP_OBJECT_IMPLEMENTATION(Float32Array, ByteArray); | 5299 FINAL_HEAP_OBJECT_IMPLEMENTATION(Float32Array, ByteArray); |
5275 friend class ByteArray; | 5300 friend class ByteArray; |
5276 friend class Class; | 5301 friend class Class; |
5277 }; | 5302 }; |
5278 | 5303 |
5279 | 5304 |
5280 class Float64Array : public ByteArray { | 5305 class Float64Array : public ByteArray { |
5281 public: | 5306 public: |
5282 intptr_t ByteLength() const { | 5307 intptr_t ByteLength() const { |
5283 return Length() * kBytesPerElement; | 5308 return Length() * kBytesPerElement; |
5284 } | 5309 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5316 static RawFloat64Array* New(const double* data, | 5341 static RawFloat64Array* New(const double* data, |
5317 intptr_t len, | 5342 intptr_t len, |
5318 Heap::Space space = Heap::kNew); | 5343 Heap::Space space = Heap::kNew); |
5319 | 5344 |
5320 private: | 5345 private: |
5321 uint8_t* ByteAddr(intptr_t byte_offset) const { | 5346 uint8_t* ByteAddr(intptr_t byte_offset) const { |
5322 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5347 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5323 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; | 5348 return reinterpret_cast<uint8_t*>(&raw_ptr()->data_) + byte_offset; |
5324 } | 5349 } |
5325 | 5350 |
5326 HEAP_OBJECT_IMPLEMENTATION(Float64Array, ByteArray); | 5351 FINAL_HEAP_OBJECT_IMPLEMENTATION(Float64Array, ByteArray); |
5327 friend class ByteArray; | 5352 friend class ByteArray; |
5328 friend class Class; | 5353 friend class Class; |
5329 }; | 5354 }; |
5330 | 5355 |
5331 | 5356 |
5332 class ExternalInt8Array : public ByteArray { | 5357 class ExternalInt8Array : public ByteArray { |
5333 public: | 5358 public: |
5334 intptr_t ByteLength() const { | 5359 intptr_t ByteLength() const { |
5335 return Length() * kBytesPerElement; | 5360 return Length() * kBytesPerElement; |
5336 } | 5361 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5374 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5399 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5375 uint8_t* data = | 5400 uint8_t* data = |
5376 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5401 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5377 return data + byte_offset; | 5402 return data + byte_offset; |
5378 } | 5403 } |
5379 | 5404 |
5380 void SetExternalData(ExternalByteArrayData<int8_t>* data) { | 5405 void SetExternalData(ExternalByteArrayData<int8_t>* data) { |
5381 raw_ptr()->external_data_ = data; | 5406 raw_ptr()->external_data_ = data; |
5382 } | 5407 } |
5383 | 5408 |
5384 HEAP_OBJECT_IMPLEMENTATION(ExternalInt8Array, ByteArray); | 5409 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalInt8Array, ByteArray); |
5385 friend class ByteArray; | 5410 friend class ByteArray; |
5386 friend class Class; | 5411 friend class Class; |
5387 }; | 5412 }; |
5388 | 5413 |
5389 | 5414 |
5390 class ExternalUint8Array : public ByteArray { | 5415 class ExternalUint8Array : public ByteArray { |
5391 public: | 5416 public: |
5392 intptr_t ByteLength() const { | 5417 intptr_t ByteLength() const { |
5393 return Length() * kBytesPerElement; | 5418 return Length() * kBytesPerElement; |
5394 } | 5419 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5436 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5461 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5437 uint8_t* data = | 5462 uint8_t* data = |
5438 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5463 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5439 return data + byte_offset; | 5464 return data + byte_offset; |
5440 } | 5465 } |
5441 | 5466 |
5442 void SetExternalData(ExternalByteArrayData<uint8_t>* data) { | 5467 void SetExternalData(ExternalByteArrayData<uint8_t>* data) { |
5443 raw_ptr()->external_data_ = data; | 5468 raw_ptr()->external_data_ = data; |
5444 } | 5469 } |
5445 | 5470 |
5446 HEAP_OBJECT_IMPLEMENTATION(ExternalUint8Array, ByteArray); | 5471 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8Array, ByteArray); |
5447 friend class ByteArray; | 5472 friend class ByteArray; |
5448 friend class Class; | 5473 friend class Class; |
5449 friend class TokenStream; | 5474 friend class TokenStream; |
5450 }; | 5475 }; |
5451 | 5476 |
5452 | 5477 |
5453 class ExternalUint8ClampedArray : public ExternalUint8Array { | 5478 class ExternalUint8ClampedArray : public ExternalUint8Array { |
5454 public: | 5479 public: |
5455 static RawExternalUint8ClampedArray* New(uint8_t* data, | 5480 static RawExternalUint8ClampedArray* New(uint8_t* data, |
5456 intptr_t len, | 5481 intptr_t len, |
5457 void* peer, | 5482 void* peer, |
5458 Dart_PeerFinalizer callback, | 5483 Dart_PeerFinalizer callback, |
5459 Heap::Space space = Heap::kNew); | 5484 Heap::Space space = Heap::kNew); |
5460 | 5485 |
5461 private: | 5486 private: |
5462 HEAP_OBJECT_IMPLEMENTATION(ExternalUint8ClampedArray, ExternalUint8Array); | 5487 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8ClampedArray, |
5488 ExternalUint8Array); | |
5463 friend class Class; | 5489 friend class Class; |
5464 }; | 5490 }; |
5465 | 5491 |
5466 | 5492 |
5467 class ExternalInt16Array : public ByteArray { | 5493 class ExternalInt16Array : public ByteArray { |
5468 public: | 5494 public: |
5469 intptr_t ByteLength() const { | 5495 intptr_t ByteLength() const { |
5470 return Length() * kBytesPerElement; | 5496 return Length() * kBytesPerElement; |
5471 } | 5497 } |
5472 | 5498 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5509 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5535 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5510 uint8_t* data = | 5536 uint8_t* data = |
5511 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5537 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5512 return data + byte_offset; | 5538 return data + byte_offset; |
5513 } | 5539 } |
5514 | 5540 |
5515 void SetExternalData(ExternalByteArrayData<int16_t>* data) { | 5541 void SetExternalData(ExternalByteArrayData<int16_t>* data) { |
5516 raw_ptr()->external_data_ = data; | 5542 raw_ptr()->external_data_ = data; |
5517 } | 5543 } |
5518 | 5544 |
5519 HEAP_OBJECT_IMPLEMENTATION(ExternalInt16Array, ByteArray); | 5545 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalInt16Array, ByteArray); |
5520 friend class ByteArray; | 5546 friend class ByteArray; |
5521 friend class Class; | 5547 friend class Class; |
5522 }; | 5548 }; |
5523 | 5549 |
5524 | 5550 |
5525 class ExternalUint16Array : public ByteArray { | 5551 class ExternalUint16Array : public ByteArray { |
5526 public: | 5552 public: |
5527 intptr_t ByteLength() const { | 5553 intptr_t ByteLength() const { |
5528 return Length() * kBytesPerElement; | 5554 return Length() * kBytesPerElement; |
5529 } | 5555 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5567 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5593 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5568 uint8_t* data = | 5594 uint8_t* data = |
5569 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5595 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5570 return data + byte_offset; | 5596 return data + byte_offset; |
5571 } | 5597 } |
5572 | 5598 |
5573 void SetExternalData(ExternalByteArrayData<uint16_t>* data) { | 5599 void SetExternalData(ExternalByteArrayData<uint16_t>* data) { |
5574 raw_ptr()->external_data_ = data; | 5600 raw_ptr()->external_data_ = data; |
5575 } | 5601 } |
5576 | 5602 |
5577 HEAP_OBJECT_IMPLEMENTATION(ExternalUint16Array, ByteArray); | 5603 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalUint16Array, ByteArray); |
5578 friend class ByteArray; | 5604 friend class ByteArray; |
5579 friend class Class; | 5605 friend class Class; |
5580 }; | 5606 }; |
5581 | 5607 |
5582 | 5608 |
5583 class ExternalInt32Array : public ByteArray { | 5609 class ExternalInt32Array : public ByteArray { |
5584 public: | 5610 public: |
5585 intptr_t ByteLength() const { | 5611 intptr_t ByteLength() const { |
5586 return Length() * kBytesPerElement; | 5612 return Length() * kBytesPerElement; |
5587 } | 5613 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5625 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5651 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5626 uint8_t* data = | 5652 uint8_t* data = |
5627 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5653 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5628 return data + byte_offset; | 5654 return data + byte_offset; |
5629 } | 5655 } |
5630 | 5656 |
5631 void SetExternalData(ExternalByteArrayData<int32_t>* data) { | 5657 void SetExternalData(ExternalByteArrayData<int32_t>* data) { |
5632 raw_ptr()->external_data_ = data; | 5658 raw_ptr()->external_data_ = data; |
5633 } | 5659 } |
5634 | 5660 |
5635 HEAP_OBJECT_IMPLEMENTATION(ExternalInt32Array, ByteArray); | 5661 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalInt32Array, ByteArray); |
5636 friend class ByteArray; | 5662 friend class ByteArray; |
5637 friend class Class; | 5663 friend class Class; |
5638 }; | 5664 }; |
5639 | 5665 |
5640 | 5666 |
5641 class ExternalUint32Array : public ByteArray { | 5667 class ExternalUint32Array : public ByteArray { |
5642 public: | 5668 public: |
5643 intptr_t ByteLength() const { | 5669 intptr_t ByteLength() const { |
5644 return Length() * kBytesPerElement; | 5670 return Length() * kBytesPerElement; |
5645 } | 5671 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5683 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5709 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5684 uint8_t* data = | 5710 uint8_t* data = |
5685 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5711 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5686 return data + byte_offset; | 5712 return data + byte_offset; |
5687 } | 5713 } |
5688 | 5714 |
5689 void SetExternalData(ExternalByteArrayData<uint32_t>* data) { | 5715 void SetExternalData(ExternalByteArrayData<uint32_t>* data) { |
5690 raw_ptr()->external_data_ = data; | 5716 raw_ptr()->external_data_ = data; |
5691 } | 5717 } |
5692 | 5718 |
5693 HEAP_OBJECT_IMPLEMENTATION(ExternalUint32Array, ByteArray); | 5719 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalUint32Array, ByteArray); |
5694 friend class ByteArray; | 5720 friend class ByteArray; |
5695 friend class Class; | 5721 friend class Class; |
5696 }; | 5722 }; |
5697 | 5723 |
5698 | 5724 |
5699 class ExternalInt64Array : public ByteArray { | 5725 class ExternalInt64Array : public ByteArray { |
5700 public: | 5726 public: |
5701 intptr_t ByteLength() const { | 5727 intptr_t ByteLength() const { |
5702 return Length() * kBytesPerElement; | 5728 return Length() * kBytesPerElement; |
5703 } | 5729 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5741 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5767 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5742 uint8_t* data = | 5768 uint8_t* data = |
5743 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5769 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5744 return data + byte_offset; | 5770 return data + byte_offset; |
5745 } | 5771 } |
5746 | 5772 |
5747 void SetExternalData(ExternalByteArrayData<int64_t>* data) { | 5773 void SetExternalData(ExternalByteArrayData<int64_t>* data) { |
5748 raw_ptr()->external_data_ = data; | 5774 raw_ptr()->external_data_ = data; |
5749 } | 5775 } |
5750 | 5776 |
5751 HEAP_OBJECT_IMPLEMENTATION(ExternalInt64Array, ByteArray); | 5777 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalInt64Array, ByteArray); |
5752 friend class ByteArray; | 5778 friend class ByteArray; |
5753 friend class Class; | 5779 friend class Class; |
5754 }; | 5780 }; |
5755 | 5781 |
5756 | 5782 |
5757 class ExternalUint64Array : public ByteArray { | 5783 class ExternalUint64Array : public ByteArray { |
5758 public: | 5784 public: |
5759 intptr_t ByteLength() const { | 5785 intptr_t ByteLength() const { |
5760 return Length() * kBytesPerElement; | 5786 return Length() * kBytesPerElement; |
5761 } | 5787 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5799 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5825 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5800 uint8_t* data = | 5826 uint8_t* data = |
5801 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5827 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5802 return data + byte_offset; | 5828 return data + byte_offset; |
5803 } | 5829 } |
5804 | 5830 |
5805 void SetExternalData(ExternalByteArrayData<uint64_t>* data) { | 5831 void SetExternalData(ExternalByteArrayData<uint64_t>* data) { |
5806 raw_ptr()->external_data_ = data; | 5832 raw_ptr()->external_data_ = data; |
5807 } | 5833 } |
5808 | 5834 |
5809 HEAP_OBJECT_IMPLEMENTATION(ExternalUint64Array, ByteArray); | 5835 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalUint64Array, ByteArray); |
5810 friend class ByteArray; | 5836 friend class ByteArray; |
5811 friend class Class; | 5837 friend class Class; |
5812 }; | 5838 }; |
5813 | 5839 |
5814 | 5840 |
5815 class ExternalFloat32Array : public ByteArray { | 5841 class ExternalFloat32Array : public ByteArray { |
5816 public: | 5842 public: |
5817 intptr_t ByteLength() const { | 5843 intptr_t ByteLength() const { |
5818 return Length() * kBytesPerElement; | 5844 return Length() * kBytesPerElement; |
5819 } | 5845 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5857 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5883 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5858 uint8_t* data = | 5884 uint8_t* data = |
5859 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5885 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5860 return data + byte_offset; | 5886 return data + byte_offset; |
5861 } | 5887 } |
5862 | 5888 |
5863 void SetExternalData(ExternalByteArrayData<float>* data) { | 5889 void SetExternalData(ExternalByteArrayData<float>* data) { |
5864 raw_ptr()->external_data_ = data; | 5890 raw_ptr()->external_data_ = data; |
5865 } | 5891 } |
5866 | 5892 |
5867 HEAP_OBJECT_IMPLEMENTATION(ExternalFloat32Array, ByteArray); | 5893 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat32Array, ByteArray); |
5868 friend class ByteArray; | 5894 friend class ByteArray; |
5869 friend class Class; | 5895 friend class Class; |
5870 }; | 5896 }; |
5871 | 5897 |
5872 | 5898 |
5873 class ExternalFloat64Array : public ByteArray { | 5899 class ExternalFloat64Array : public ByteArray { |
5874 public: | 5900 public: |
5875 intptr_t ByteLength() const { | 5901 intptr_t ByteLength() const { |
5876 return Length() * kBytesPerElement; | 5902 return Length() * kBytesPerElement; |
5877 } | 5903 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5915 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); | 5941 ASSERT((byte_offset >= 0) && (byte_offset < ByteLength())); |
5916 uint8_t* data = | 5942 uint8_t* data = |
5917 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); | 5943 reinterpret_cast<uint8_t*>(raw_ptr()->external_data_->data()); |
5918 return data + byte_offset; | 5944 return data + byte_offset; |
5919 } | 5945 } |
5920 | 5946 |
5921 void SetExternalData(ExternalByteArrayData<double>* data) { | 5947 void SetExternalData(ExternalByteArrayData<double>* data) { |
5922 raw_ptr()->external_data_ = data; | 5948 raw_ptr()->external_data_ = data; |
5923 } | 5949 } |
5924 | 5950 |
5925 HEAP_OBJECT_IMPLEMENTATION(ExternalFloat64Array, ByteArray); | 5951 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat64Array, ByteArray); |
5926 friend class ByteArray; | 5952 friend class ByteArray; |
5927 friend class Class; | 5953 friend class Class; |
5928 }; | 5954 }; |
5929 | 5955 |
5930 | 5956 |
5931 // DartFunction represents the abstract Dart class 'Function'. | 5957 // DartFunction represents the abstract Dart class 'Function'. |
5932 class DartFunction : public Instance { | 5958 class DartFunction : public Instance { |
5933 private: | 5959 private: |
5934 HEAP_OBJECT_IMPLEMENTATION(DartFunction, Instance); | 5960 FINAL_HEAP_OBJECT_IMPLEMENTATION(DartFunction, Instance); |
5935 friend class Class; | 5961 friend class Class; |
5936 friend class Instance; | 5962 friend class Instance; |
5937 }; | 5963 }; |
5938 | 5964 |
5939 | 5965 |
5940 class Closure : public AllStatic { | 5966 class Closure : public AllStatic { |
5941 public: | 5967 public: |
5942 static RawFunction* function(const Instance& closure) { | 5968 static RawFunction* function(const Instance& closure) { |
5943 return *FunctionAddr(closure); | 5969 return *FunctionAddr(closure); |
5944 } | 5970 } |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6029 const GrowableObjectArray& pc_offset_list, | 6055 const GrowableObjectArray& pc_offset_list, |
6030 Heap::Space space = Heap::kNew); | 6056 Heap::Space space = Heap::kNew); |
6031 | 6057 |
6032 const char* ToCStringInternal(bool verbose) const; | 6058 const char* ToCStringInternal(bool verbose) const; |
6033 | 6059 |
6034 private: | 6060 private: |
6035 void set_function_array(const Array& function_array) const; | 6061 void set_function_array(const Array& function_array) const; |
6036 void set_code_array(const Array& code_array) const; | 6062 void set_code_array(const Array& code_array) const; |
6037 void set_pc_offset_array(const Array& pc_offset_array) const; | 6063 void set_pc_offset_array(const Array& pc_offset_array) const; |
6038 | 6064 |
6039 HEAP_OBJECT_IMPLEMENTATION(Stacktrace, Instance); | 6065 FINAL_HEAP_OBJECT_IMPLEMENTATION(Stacktrace, Instance); |
6040 friend class Class; | 6066 friend class Class; |
6041 }; | 6067 }; |
6042 | 6068 |
6043 | 6069 |
6044 // Internal JavaScript regular expression object. | 6070 // Internal JavaScript regular expression object. |
6045 class JSRegExp : public Instance { | 6071 class JSRegExp : public Instance { |
6046 public: | 6072 public: |
6047 // Meaning of RegExType: | 6073 // Meaning of RegExType: |
6048 // kUninitialized: the type of th regexp has not been initialized yet. | 6074 // kUninitialized: the type of th regexp has not been initialized yet. |
6049 // kSimple: A simple pattern to match against, using string indexOf operation. | 6075 // kSimple: A simple pattern to match against, using string indexOf operation. |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6109 private: | 6135 private: |
6110 void set_type(RegExType type) const { raw_ptr()->type_ = type; } | 6136 void set_type(RegExType type) const { raw_ptr()->type_ = type; } |
6111 void set_flags(intptr_t value) const { raw_ptr()->flags_ = value; } | 6137 void set_flags(intptr_t value) const { raw_ptr()->flags_ = value; } |
6112 | 6138 |
6113 void SetLength(intptr_t value) const { | 6139 void SetLength(intptr_t value) const { |
6114 // This is only safe because we create a new Smi, which does not cause | 6140 // This is only safe because we create a new Smi, which does not cause |
6115 // heap allocation. | 6141 // heap allocation. |
6116 raw_ptr()->data_length_ = Smi::New(value); | 6142 raw_ptr()->data_length_ = Smi::New(value); |
6117 } | 6143 } |
6118 | 6144 |
6119 HEAP_OBJECT_IMPLEMENTATION(JSRegExp, Instance); | 6145 FINAL_HEAP_OBJECT_IMPLEMENTATION(JSRegExp, Instance); |
6120 friend class Class; | 6146 friend class Class; |
6121 }; | 6147 }; |
6122 | 6148 |
6123 | 6149 |
6124 class WeakProperty : public Instance { | 6150 class WeakProperty : public Instance { |
6125 public: | 6151 public: |
6126 RawObject* key() const { | 6152 RawObject* key() const { |
6127 return raw_ptr()->key_; | 6153 return raw_ptr()->key_; |
6128 } | 6154 } |
6129 | 6155 |
(...skipping 14 matching lines...) Expand all Loading... | |
6144 static intptr_t InstanceSize() { | 6170 static intptr_t InstanceSize() { |
6145 return RoundedAllocationSize(sizeof(RawWeakProperty)); | 6171 return RoundedAllocationSize(sizeof(RawWeakProperty)); |
6146 } | 6172 } |
6147 | 6173 |
6148 static void Clear(RawWeakProperty* raw_weak) { | 6174 static void Clear(RawWeakProperty* raw_weak) { |
6149 raw_weak->ptr()->key_ = Object::null(); | 6175 raw_weak->ptr()->key_ = Object::null(); |
6150 raw_weak->ptr()->value_ = Object::null(); | 6176 raw_weak->ptr()->value_ = Object::null(); |
6151 } | 6177 } |
6152 | 6178 |
6153 private: | 6179 private: |
6154 HEAP_OBJECT_IMPLEMENTATION(WeakProperty, Instance); | 6180 FINAL_HEAP_OBJECT_IMPLEMENTATION(WeakProperty, Instance); |
6155 friend class Class; | 6181 friend class Class; |
6156 }; | 6182 }; |
6157 | 6183 |
6158 | 6184 |
6159 // Breaking cycles and loops. | 6185 // Breaking cycles and loops. |
6160 RawClass* Object::clazz() const { | 6186 RawClass* Object::clazz() const { |
6161 uword raw_value = reinterpret_cast<uword>(raw_); | 6187 uword raw_value = reinterpret_cast<uword>(raw_); |
6162 if ((raw_value & kSmiTagMask) == kSmiTag) { | 6188 if ((raw_value & kSmiTagMask) == kSmiTag) { |
6163 return Smi::Class(); | 6189 return Smi::Class(); |
6164 } | 6190 } |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6275 | 6301 |
6276 | 6302 |
6277 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, | 6303 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, |
6278 intptr_t index) { | 6304 intptr_t index) { |
6279 return array.At((index * kEntryLength) + kTargetFunctionIndex); | 6305 return array.At((index * kEntryLength) + kTargetFunctionIndex); |
6280 } | 6306 } |
6281 | 6307 |
6282 } // namespace dart | 6308 } // namespace dart |
6283 | 6309 |
6284 #endif // VM_OBJECT_H_ | 6310 #endif // VM_OBJECT_H_ |
OLD | NEW |