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_RAW_OBJECT_H_ | 5 #ifndef VM_RAW_OBJECT_H_ |
6 #define VM_RAW_OBJECT_H_ | 6 #define VM_RAW_OBJECT_H_ |
7 | 7 |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/atomic.h" | 9 #include "vm/atomic.h" |
10 #include "vm/globals.h" | 10 #include "vm/globals.h" |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 #define RAW_HEAP_OBJECT_IMPLEMENTATION(object) \ | 243 #define RAW_HEAP_OBJECT_IMPLEMENTATION(object) \ |
244 private: \ | 244 private: \ |
245 RAW_OBJECT_IMPLEMENTATION(object); \ | 245 RAW_OBJECT_IMPLEMENTATION(object); \ |
246 Raw##object* ptr() const { \ | 246 Raw##object* ptr() const { \ |
247 ASSERT(IsHeapObject()); \ | 247 ASSERT(IsHeapObject()); \ |
248 return reinterpret_cast<Raw##object*>( \ | 248 return reinterpret_cast<Raw##object*>( \ |
249 reinterpret_cast<uword>(this) - kHeapObjectTag); \ | 249 reinterpret_cast<uword>(this) - kHeapObjectTag); \ |
250 } \ | 250 } \ |
251 SNAPSHOT_WRITER_SUPPORT() \ | 251 SNAPSHOT_WRITER_SUPPORT() \ |
252 HEAP_PROFILER_SUPPORT() \ | 252 HEAP_PROFILER_SUPPORT() \ |
| 253 friend class object##SerializationCluster; \ |
| 254 friend class object##DeserializationCluster; \ |
253 | 255 |
254 // RawObject is the base class of all raw objects, even though it carries the | 256 // RawObject is the base class of all raw objects; even though it carries the |
255 // class_ field not all raw objects are allocated in the heap and thus cannot | 257 // tags_ field not all raw objects are allocated in the heap and thus cannot |
256 // be dereferenced (e.g. RawSmi). | 258 // be dereferenced (e.g. RawSmi). |
257 class RawObject { | 259 class RawObject { |
258 public: | 260 public: |
259 // The tags field which is a part of the object header uses the following | 261 // The tags field which is a part of the object header uses the following |
260 // bit fields for storing tags. | 262 // bit fields for storing tags. |
261 enum TagBits { | 263 enum TagBits { |
262 kMarkBit = 0, | 264 kMarkBit = 0, |
263 kCanonicalBit = 1, | 265 kCanonicalBit = 1, |
264 kVMHeapObjectBit = 2, | 266 kVMHeapObjectBit = 2, |
265 kRememberedBit = 3, | 267 kRememberedBit = 3, |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 VerifiedMemory::Write(const_cast<RawSmi**>(addr), value); | 604 VerifiedMemory::Write(const_cast<RawSmi**>(addr), value); |
603 } | 605 } |
604 | 606 |
605 #if defined(DEBUG) | 607 #if defined(DEBUG) |
606 static void ValidateOverwrittenPointer(RawObject* raw); | 608 static void ValidateOverwrittenPointer(RawObject* raw); |
607 static void ValidateOverwrittenSmi(RawSmi* raw); | 609 static void ValidateOverwrittenSmi(RawSmi* raw); |
608 #endif // DEBUG | 610 #endif // DEBUG |
609 | 611 |
610 friend class Api; | 612 friend class Api; |
611 friend class ApiMessageReader; // GetClassId | 613 friend class ApiMessageReader; // GetClassId |
| 614 friend class Serializer; // GetClassId |
612 friend class Array; | 615 friend class Array; |
613 friend class Bigint; | 616 friend class Bigint; |
614 friend class ByteBuffer; | 617 friend class ByteBuffer; |
615 friend class Closure; | 618 friend class Closure; |
616 friend class Code; | 619 friend class Code; |
617 friend class Double; | 620 friend class Double; |
618 friend class ForwardPointersVisitor; // StorePointer | 621 friend class ForwardPointersVisitor; // StorePointer |
619 friend class FreeListElement; | 622 friend class FreeListElement; |
620 friend class Function; | 623 friend class Function; |
621 friend class GCMarker; | 624 friend class GCMarker; |
(...skipping 15 matching lines...) Expand all Loading... |
637 friend class Scavenger; | 640 friend class Scavenger; |
638 friend class ScavengerVisitor; | 641 friend class ScavengerVisitor; |
639 friend class SizeExcludingClassVisitor; // GetClassId | 642 friend class SizeExcludingClassVisitor; // GetClassId |
640 friend class InstanceAccumulator; // GetClassId | 643 friend class InstanceAccumulator; // GetClassId |
641 friend class RetainingPathVisitor; // GetClassId | 644 friend class RetainingPathVisitor; // GetClassId |
642 friend class SkippedCodeFunctions; // StorePointer | 645 friend class SkippedCodeFunctions; // StorePointer |
643 friend class InstructionsReader; // tags_ check | 646 friend class InstructionsReader; // tags_ check |
644 friend class AssemblyInstructionsWriter; | 647 friend class AssemblyInstructionsWriter; |
645 friend class BlobInstructionsWriter; | 648 friend class BlobInstructionsWriter; |
646 friend class SnapshotReader; | 649 friend class SnapshotReader; |
| 650 friend class Deserializer; |
647 friend class SnapshotWriter; | 651 friend class SnapshotWriter; |
648 friend class String; | 652 friend class String; |
649 friend class Type; // GetClassId | 653 friend class Type; // GetClassId |
650 friend class TypedData; | 654 friend class TypedData; |
651 friend class TypedDataView; | 655 friend class TypedDataView; |
652 friend class WeakProperty; // StorePointer | 656 friend class WeakProperty; // StorePointer |
653 friend class Instance; // StorePointer | 657 friend class Instance; // StorePointer |
654 friend class StackFrame; // GetCodeObject assertion. | 658 friend class StackFrame; // GetCodeObject assertion. |
655 friend class CodeLookupTableBuilder; // profiler | 659 friend class CodeLookupTableBuilder; // profiler |
656 friend class NativeEntry; // GetClassId | 660 friend class NativeEntry; // GetClassId |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 int16_t num_own_type_arguments_; // Number of non-overlapping type arguments. | 727 int16_t num_own_type_arguments_; // Number of non-overlapping type arguments. |
724 uint16_t num_native_fields_; // Number of native fields in class. | 728 uint16_t num_native_fields_; // Number of native fields in class. |
725 uint16_t state_bits_; | 729 uint16_t state_bits_; |
726 | 730 |
727 friend class Instance; | 731 friend class Instance; |
728 friend class Isolate; | 732 friend class Isolate; |
729 friend class Object; | 733 friend class Object; |
730 friend class RawInstance; | 734 friend class RawInstance; |
731 friend class RawInstructions; | 735 friend class RawInstructions; |
732 friend class SnapshotReader; | 736 friend class SnapshotReader; |
| 737 friend class InstanceSerializationCluster; |
733 }; | 738 }; |
734 | 739 |
735 | 740 |
736 class RawUnresolvedClass : public RawObject { | 741 class RawUnresolvedClass : public RawObject { |
737 RAW_HEAP_OBJECT_IMPLEMENTATION(UnresolvedClass); | 742 RAW_HEAP_OBJECT_IMPLEMENTATION(UnresolvedClass); |
738 | 743 |
739 RawObject** from() { | 744 RawObject** from() { |
740 return reinterpret_cast<RawObject**>(&ptr()->library_prefix_); | 745 return reinterpret_cast<RawObject**>(&ptr()->library_prefix_); |
741 } | 746 } |
742 RawLibraryPrefix* library_prefix_; // Library prefix qualifier for the ident. | 747 RawLibraryPrefix* library_prefix_; // Library prefix qualifier for the ident. |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
822 kGeneratorBit = 0x2, | 827 kGeneratorBit = 0x2, |
823 kAsync = kAsyncBit, | 828 kAsync = kAsyncBit, |
824 kSyncGen = kGeneratorBit, | 829 kSyncGen = kGeneratorBit, |
825 kAsyncGen = kAsyncBit | kGeneratorBit, | 830 kAsyncGen = kAsyncBit | kGeneratorBit, |
826 }; | 831 }; |
827 | 832 |
828 private: | 833 private: |
829 // So that the SkippedCodeFunctions::DetachCode can null out the code fields. | 834 // So that the SkippedCodeFunctions::DetachCode can null out the code fields. |
830 friend class SkippedCodeFunctions; | 835 friend class SkippedCodeFunctions; |
831 friend class Class; | 836 friend class Class; |
| 837 |
832 RAW_HEAP_OBJECT_IMPLEMENTATION(Function); | 838 RAW_HEAP_OBJECT_IMPLEMENTATION(Function); |
| 839 |
833 static bool ShouldVisitCode(RawCode* raw_code); | 840 static bool ShouldVisitCode(RawCode* raw_code); |
834 static bool CheckUsageCounter(RawFunction* raw_fun); | 841 static bool CheckUsageCounter(RawFunction* raw_fun); |
835 | 842 |
836 RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->name_); } | 843 RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->name_); } |
837 RawString* name_; | 844 RawString* name_; |
838 RawObject* owner_; // Class or patch class or mixin class | 845 RawObject* owner_; // Class or patch class or mixin class |
839 // where this function is defined. | 846 // where this function is defined. |
840 RawAbstractType* result_type_; | 847 RawAbstractType* result_type_; |
841 RawArray* parameter_types_; | 848 RawArray* parameter_types_; |
842 RawArray* parameter_names_; | 849 RawArray* parameter_names_; |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1154 int32_t* data() { OPEN_ARRAY_START(int32_t, int32_t); } | 1161 int32_t* data() { OPEN_ARRAY_START(int32_t, int32_t); } |
1155 const int32_t* data() const { OPEN_ARRAY_START(int32_t, int32_t); } | 1162 const int32_t* data() const { OPEN_ARRAY_START(int32_t, int32_t); } |
1156 | 1163 |
1157 static bool ContainsPC(RawObject* raw_obj, uword pc); | 1164 static bool ContainsPC(RawObject* raw_obj, uword pc); |
1158 | 1165 |
1159 friend class Function; | 1166 friend class Function; |
1160 template<bool> friend class MarkingVisitorBase; | 1167 template<bool> friend class MarkingVisitorBase; |
1161 friend class SkippedCodeFunctions; | 1168 friend class SkippedCodeFunctions; |
1162 friend class StackFrame; | 1169 friend class StackFrame; |
1163 friend class Profiler; | 1170 friend class Profiler; |
| 1171 friend class FunctionDeserializationCluster; |
1164 }; | 1172 }; |
1165 | 1173 |
1166 | 1174 |
1167 class RawObjectPool : public RawObject { | 1175 class RawObjectPool : public RawObject { |
1168 RAW_HEAP_OBJECT_IMPLEMENTATION(ObjectPool); | 1176 RAW_HEAP_OBJECT_IMPLEMENTATION(ObjectPool); |
1169 | 1177 |
1170 intptr_t length_; | 1178 intptr_t length_; |
1171 RawTypedData* info_array_; | 1179 RawTypedData* info_array_; |
1172 | 1180 |
1173 struct Entry { | 1181 struct Entry { |
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1843 | 1851 |
1844 class RawOneByteString : public RawString { | 1852 class RawOneByteString : public RawString { |
1845 RAW_HEAP_OBJECT_IMPLEMENTATION(OneByteString); | 1853 RAW_HEAP_OBJECT_IMPLEMENTATION(OneByteString); |
1846 | 1854 |
1847 // Variable length data follows here. | 1855 // Variable length data follows here. |
1848 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } | 1856 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } |
1849 const uint8_t* data() const { OPEN_ARRAY_START(uint8_t, uint8_t); } | 1857 const uint8_t* data() const { OPEN_ARRAY_START(uint8_t, uint8_t); } |
1850 | 1858 |
1851 friend class ApiMessageReader; | 1859 friend class ApiMessageReader; |
1852 friend class SnapshotReader; | 1860 friend class SnapshotReader; |
| 1861 friend class RODataSerializationCluster; |
1853 }; | 1862 }; |
1854 | 1863 |
1855 | 1864 |
1856 class RawTwoByteString : public RawString { | 1865 class RawTwoByteString : public RawString { |
1857 RAW_HEAP_OBJECT_IMPLEMENTATION(TwoByteString); | 1866 RAW_HEAP_OBJECT_IMPLEMENTATION(TwoByteString); |
1858 | 1867 |
1859 // Variable length data follows here. | 1868 // Variable length data follows here. |
1860 uint16_t* data() { OPEN_ARRAY_START(uint16_t, uint16_t); } | 1869 uint16_t* data() { OPEN_ARRAY_START(uint16_t, uint16_t); } |
1861 const uint16_t* data() const { OPEN_ARRAY_START(uint16_t, uint16_t); } | 1870 const uint16_t* data() const { OPEN_ARRAY_START(uint16_t, uint16_t); } |
1862 | 1871 |
1863 friend class SnapshotReader; | 1872 friend class SnapshotReader; |
| 1873 friend class RODataSerializationCluster; |
1864 }; | 1874 }; |
1865 | 1875 |
1866 | 1876 |
1867 template<typename T> | 1877 template<typename T> |
1868 class ExternalStringData { | 1878 class ExternalStringData { |
1869 public: | 1879 public: |
1870 ExternalStringData(const T* data, void* peer, Dart_PeerFinalizer callback) : | 1880 ExternalStringData(const T* data, void* peer, Dart_PeerFinalizer callback) : |
1871 data_(data), peer_(peer), callback_(callback) { | 1881 data_(data), peer_(peer), callback_(callback) { |
1872 } | 1882 } |
1873 ~ExternalStringData() { | 1883 ~ExternalStringData() { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1929 } | 1939 } |
1930 RawTypeArguments* type_arguments_; | 1940 RawTypeArguments* type_arguments_; |
1931 RawSmi* length_; | 1941 RawSmi* length_; |
1932 // Variable length data follows here. | 1942 // Variable length data follows here. |
1933 RawObject** data() { OPEN_ARRAY_START(RawObject*, RawObject*); } | 1943 RawObject** data() { OPEN_ARRAY_START(RawObject*, RawObject*); } |
1934 RawObject* const* data() const { OPEN_ARRAY_START(RawObject*, RawObject*); } | 1944 RawObject* const* data() const { OPEN_ARRAY_START(RawObject*, RawObject*); } |
1935 RawObject** to(intptr_t length) { | 1945 RawObject** to(intptr_t length) { |
1936 return reinterpret_cast<RawObject**>(&ptr()->data()[length - 1]); | 1946 return reinterpret_cast<RawObject**>(&ptr()->data()[length - 1]); |
1937 } | 1947 } |
1938 | 1948 |
| 1949 friend class LinkedHashMapSerializationCluster; |
| 1950 friend class LinkedHashMapDeserializationCluster; |
| 1951 friend class Deserializer; |
1939 friend class RawCode; | 1952 friend class RawCode; |
1940 friend class RawImmutableArray; | 1953 friend class RawImmutableArray; |
1941 friend class SnapshotReader; | 1954 friend class SnapshotReader; |
1942 friend class GrowableObjectArray; | 1955 friend class GrowableObjectArray; |
1943 friend class LinkedHashMap; | 1956 friend class LinkedHashMap; |
1944 friend class RawLinkedHashMap; | 1957 friend class RawLinkedHashMap; |
1945 friend class Object; | 1958 friend class Object; |
1946 friend class ICData; // For high performance access. | 1959 friend class ICData; // For high performance access. |
1947 friend class SubtypeTestCache; // For high performance access. | 1960 friend class SubtypeTestCache; // For high performance access. |
1948 }; | 1961 }; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1981 RawTypeArguments* type_arguments_; | 1994 RawTypeArguments* type_arguments_; |
1982 RawTypedData* index_; | 1995 RawTypedData* index_; |
1983 RawSmi* hash_mask_; | 1996 RawSmi* hash_mask_; |
1984 RawArray* data_; | 1997 RawArray* data_; |
1985 RawSmi* used_data_; | 1998 RawSmi* used_data_; |
1986 RawSmi* deleted_keys_; | 1999 RawSmi* deleted_keys_; |
1987 RawObject** to() { | 2000 RawObject** to() { |
1988 return reinterpret_cast<RawObject**>(&ptr()->deleted_keys_); | 2001 return reinterpret_cast<RawObject**>(&ptr()->deleted_keys_); |
1989 } | 2002 } |
1990 | 2003 |
1991 | |
1992 friend class SnapshotReader; | 2004 friend class SnapshotReader; |
1993 }; | 2005 }; |
1994 | 2006 |
1995 | 2007 |
1996 class RawFloat32x4 : public RawInstance { | 2008 class RawFloat32x4 : public RawInstance { |
1997 RAW_HEAP_OBJECT_IMPLEMENTATION(Float32x4); | 2009 RAW_HEAP_OBJECT_IMPLEMENTATION(Float32x4); |
1998 | 2010 |
1999 ALIGN8 float value_[4]; | 2011 ALIGN8 float value_[4]; |
2000 | 2012 |
2001 friend class SnapshotReader; | 2013 friend class SnapshotReader; |
| 2014 |
2002 public: | 2015 public: |
2003 float x() const { return value_[0]; } | 2016 float x() const { return value_[0]; } |
2004 float y() const { return value_[1]; } | 2017 float y() const { return value_[1]; } |
2005 float z() const { return value_[2]; } | 2018 float z() const { return value_[2]; } |
2006 float w() const { return value_[3]; } | 2019 float w() const { return value_[3]; } |
2007 }; | 2020 }; |
2008 COMPILE_ASSERT(sizeof(RawFloat32x4) == 24); | 2021 COMPILE_ASSERT(sizeof(RawFloat32x4) == 24); |
2009 | 2022 |
2010 | 2023 |
2011 class RawInt32x4 : public RawInstance { | 2024 class RawInt32x4 : public RawInstance { |
2012 RAW_HEAP_OBJECT_IMPLEMENTATION(Int32x4); | 2025 RAW_HEAP_OBJECT_IMPLEMENTATION(Int32x4); |
2013 | 2026 |
2014 ALIGN8 int32_t value_[4]; | 2027 ALIGN8 int32_t value_[4]; |
2015 | 2028 |
2016 friend class SnapshotReader; | 2029 friend class SnapshotReader; |
| 2030 |
2017 public: | 2031 public: |
2018 int32_t x() const { return value_[0]; } | 2032 int32_t x() const { return value_[0]; } |
2019 int32_t y() const { return value_[1]; } | 2033 int32_t y() const { return value_[1]; } |
2020 int32_t z() const { return value_[2]; } | 2034 int32_t z() const { return value_[2]; } |
2021 int32_t w() const { return value_[3]; } | 2035 int32_t w() const { return value_[3]; } |
2022 }; | 2036 }; |
2023 COMPILE_ASSERT(sizeof(RawInt32x4) == 24); | 2037 COMPILE_ASSERT(sizeof(RawInt32x4) == 24); |
2024 | 2038 |
2025 | 2039 |
2026 class RawFloat64x2 : public RawInstance { | 2040 class RawFloat64x2 : public RawInstance { |
2027 RAW_HEAP_OBJECT_IMPLEMENTATION(Float64x2); | 2041 RAW_HEAP_OBJECT_IMPLEMENTATION(Float64x2); |
2028 | 2042 |
2029 ALIGN8 double value_[2]; | 2043 ALIGN8 double value_[2]; |
2030 | 2044 |
2031 friend class SnapshotReader; | 2045 friend class SnapshotReader; |
| 2046 |
2032 public: | 2047 public: |
2033 double x() const { return value_[0]; } | 2048 double x() const { return value_[0]; } |
2034 double y() const { return value_[1]; } | 2049 double y() const { return value_[1]; } |
2035 }; | 2050 }; |
2036 COMPILE_ASSERT(sizeof(RawFloat64x2) == 24); | 2051 COMPILE_ASSERT(sizeof(RawFloat64x2) == 24); |
2037 | 2052 |
2038 | 2053 |
2039 // Define an aliases for intptr_t. | 2054 // Define an aliases for intptr_t. |
2040 #if defined(ARCH_IS_32_BIT) | 2055 #if defined(ARCH_IS_32_BIT) |
2041 #define kIntPtrCid kTypedDataInt32ArrayCid | 2056 #define kIntPtrCid kTypedDataInt32ArrayCid |
(...skipping 16 matching lines...) Expand all Loading... |
2058 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } | 2073 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } |
2059 const uint8_t* data() const { OPEN_ARRAY_START(uint8_t, uint8_t); } | 2074 const uint8_t* data() const { OPEN_ARRAY_START(uint8_t, uint8_t); } |
2060 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->length_); } | 2075 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->length_); } |
2061 | 2076 |
2062 friend class Api; | 2077 friend class Api; |
2063 friend class Object; | 2078 friend class Object; |
2064 friend class Instance; | 2079 friend class Instance; |
2065 friend class SnapshotReader; | 2080 friend class SnapshotReader; |
2066 friend class ObjectPool; | 2081 friend class ObjectPool; |
2067 friend class RawObjectPool; | 2082 friend class RawObjectPool; |
| 2083 friend class ObjectPoolSerializationCluster; |
| 2084 friend class ObjectPoolDeserializationCluster; |
2068 }; | 2085 }; |
2069 | 2086 |
2070 | 2087 |
2071 class RawExternalTypedData : public RawInstance { | 2088 class RawExternalTypedData : public RawInstance { |
2072 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalTypedData); | 2089 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalTypedData); |
2073 | 2090 |
2074 protected: | 2091 protected: |
2075 RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->length_); } | 2092 RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->length_); } |
2076 RawSmi* length_; | 2093 RawSmi* length_; |
2077 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->length_); } | 2094 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->length_); } |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2429 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == | 2446 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == |
2430 kTypedDataInt8ArrayViewCid + 15); | 2447 kTypedDataInt8ArrayViewCid + 15); |
2431 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); | 2448 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); |
2432 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); | 2449 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); |
2433 return (kNullCid - kTypedDataInt8ArrayCid); | 2450 return (kNullCid - kTypedDataInt8ArrayCid); |
2434 } | 2451 } |
2435 | 2452 |
2436 } // namespace dart | 2453 } // namespace dart |
2437 | 2454 |
2438 #endif // VM_RAW_OBJECT_H_ | 2455 #endif // VM_RAW_OBJECT_H_ |
OLD | NEW |