| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef RUNTIME_VM_RAW_OBJECT_H_ | 5 #ifndef RUNTIME_VM_RAW_OBJECT_H_ |
| 6 #define RUNTIME_VM_RAW_OBJECT_H_ | 6 #define RUNTIME_VM_RAW_OBJECT_H_ |
| 7 | 7 |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/atomic.h" | 9 #include "vm/atomic.h" |
| 10 #include "vm/exceptions.h" | 10 #include "vm/exceptions.h" |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 class RawObject { | 259 class RawObject { |
| 260 public: | 260 public: |
| 261 // 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 |
| 262 // bit fields for storing tags. | 262 // bit fields for storing tags. |
| 263 enum TagBits { | 263 enum TagBits { |
| 264 kMarkBit = 0, | 264 kMarkBit = 0, |
| 265 kCanonicalBit = 1, | 265 kCanonicalBit = 1, |
| 266 kVMHeapObjectBit = 2, | 266 kVMHeapObjectBit = 2, |
| 267 kRememberedBit = 3, | 267 kRememberedBit = 3, |
| 268 kReservedTagPos = 4, // kReservedBit{100K,1M,10M} | 268 kReservedTagPos = 4, // kReservedBit{100K,1M,10M} |
| 269 #if defined(ARCH_IS_32_BIT) | |
| 270 kReservedTagSize = 4, | 269 kReservedTagSize = 4, |
| 271 kSizeTagPos = kReservedTagPos + kReservedTagSize, // = 8 | 270 kSizeTagPos = kReservedTagPos + kReservedTagSize, // = 8 |
| 272 kSizeTagSize = 8, | 271 kSizeTagSize = 8, |
| 273 kClassIdTagPos = kSizeTagPos + kSizeTagSize, // = 16 | 272 kClassIdTagPos = kSizeTagPos + kSizeTagSize, // = 16 |
| 274 kClassIdTagSize = 16, | 273 kClassIdTagSize = 16, |
| 275 #elif defined(ARCH_IS_64_BIT) | |
| 276 kReservedTagSize = 12, | |
| 277 kSizeTagPos = kReservedTagPos + kReservedTagSize, // = 16 | |
| 278 kSizeTagSize = 16, | |
| 279 kClassIdTagPos = kSizeTagPos + kSizeTagSize, // = 32 | |
| 280 kClassIdTagSize = 32, | |
| 281 #else | |
| 282 #error Unexpected architecture word size | |
| 283 #endif | |
| 284 }; | 274 }; |
| 285 | 275 |
| 286 COMPILE_ASSERT(kClassIdTagSize == (sizeof(classid_t) * kBitsPerByte)); | 276 COMPILE_ASSERT(kClassIdTagSize == (sizeof(classid_t) * kBitsPerByte)); |
| 287 | 277 |
| 288 // Encodes the object size in the tag in units of object alignment. | 278 // Encodes the object size in the tag in units of object alignment. |
| 289 class SizeTag { | 279 class SizeTag { |
| 290 public: | 280 public: |
| 291 static const intptr_t kMaxSizeTag = ((1 << RawObject::kSizeTagSize) - 1) | 281 static const intptr_t kMaxSizeTag = ((1 << RawObject::kSizeTagSize) - 1) |
| 292 << kObjectAlignmentLog2; | 282 << kObjectAlignmentLog2; |
| 293 | 283 |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 friend class ClassStatsVisitor; | 597 friend class ClassStatsVisitor; |
| 608 template <bool> | 598 template <bool> |
| 609 friend class MarkingVisitorBase; | 599 friend class MarkingVisitorBase; |
| 610 friend class Mint; | 600 friend class Mint; |
| 611 friend class Object; | 601 friend class Object; |
| 612 friend class OneByteString; // StoreSmi | 602 friend class OneByteString; // StoreSmi |
| 613 friend class RawCode; | 603 friend class RawCode; |
| 614 friend class RawExternalTypedData; | 604 friend class RawExternalTypedData; |
| 615 friend class RawInstructions; | 605 friend class RawInstructions; |
| 616 friend class RawInstance; | 606 friend class RawInstance; |
| 607 friend class RawString; |
| 617 friend class RawTypedData; | 608 friend class RawTypedData; |
| 618 friend class Scavenger; | 609 friend class Scavenger; |
| 619 friend class ScavengerVisitor; | 610 friend class ScavengerVisitor; |
| 620 friend class SizeExcludingClassVisitor; // GetClassId | 611 friend class SizeExcludingClassVisitor; // GetClassId |
| 621 friend class InstanceAccumulator; // GetClassId | 612 friend class InstanceAccumulator; // GetClassId |
| 622 friend class RetainingPathVisitor; // GetClassId | 613 friend class RetainingPathVisitor; // GetClassId |
| 623 friend class SkippedCodeFunctions; // StorePointer | 614 friend class SkippedCodeFunctions; // StorePointer |
| 624 friend class ImageReader; // tags_ check | 615 friend class ImageReader; // tags_ check |
| 625 friend class ImageWriter; | 616 friend class ImageWriter; |
| 626 friend class AssemblyImageWriter; | 617 friend class AssemblyImageWriter; |
| (...skipping 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1856 }; | 1847 }; |
| 1857 COMPILE_ASSERT(sizeof(RawDouble) == 16); | 1848 COMPILE_ASSERT(sizeof(RawDouble) == 16); |
| 1858 | 1849 |
| 1859 | 1850 |
| 1860 class RawString : public RawInstance { | 1851 class RawString : public RawInstance { |
| 1861 RAW_HEAP_OBJECT_IMPLEMENTATION(String); | 1852 RAW_HEAP_OBJECT_IMPLEMENTATION(String); |
| 1862 | 1853 |
| 1863 protected: | 1854 protected: |
| 1864 RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->length_); } | 1855 RawObject** from() { return reinterpret_cast<RawObject**>(&ptr()->length_); } |
| 1865 RawSmi* length_; | 1856 RawSmi* length_; |
| 1857 #if !defined(HASH_IN_OBJECT_HEADER) |
| 1866 RawSmi* hash_; | 1858 RawSmi* hash_; |
| 1867 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->hash_); } | 1859 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->hash_); } |
| 1860 #else |
| 1861 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->length_); } |
| 1862 #endif |
| 1868 | 1863 |
| 1864 private: |
| 1869 friend class Library; | 1865 friend class Library; |
| 1866 friend class OneByteStringSerializationCluster; |
| 1867 friend class TwoByteStringSerializationCluster; |
| 1868 friend class OneByteStringDeserializationCluster; |
| 1869 friend class TwoByteStringDeserializationCluster; |
| 1870 friend class RODataSerializationCluster; |
| 1870 }; | 1871 }; |
| 1871 | 1872 |
| 1872 | 1873 |
| 1873 class RawOneByteString : public RawString { | 1874 class RawOneByteString : public RawString { |
| 1874 RAW_HEAP_OBJECT_IMPLEMENTATION(OneByteString); | 1875 RAW_HEAP_OBJECT_IMPLEMENTATION(OneByteString); |
| 1875 | 1876 |
| 1876 // Variable length data follows here. | 1877 // Variable length data follows here. |
| 1877 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } | 1878 uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } |
| 1878 const uint8_t* data() const { OPEN_ARRAY_START(uint8_t, uint8_t); } | 1879 const uint8_t* data() const { OPEN_ARRAY_START(uint8_t, uint8_t); } |
| 1879 | 1880 |
| (...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2446 inline intptr_t RawObject::NumberOfTypedDataClasses() { | 2447 inline intptr_t RawObject::NumberOfTypedDataClasses() { |
| 2447 // Make sure this is updated when new TypedData types are added. | 2448 // Make sure this is updated when new TypedData types are added. |
| 2448 COMPILE_ASSERT(kTypedDataInt8ArrayViewCid == kTypedDataInt8ArrayCid + 14); | 2449 COMPILE_ASSERT(kTypedDataInt8ArrayViewCid == kTypedDataInt8ArrayCid + 14); |
| 2449 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == | 2450 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == |
| 2450 kTypedDataInt8ArrayViewCid + 15); | 2451 kTypedDataInt8ArrayViewCid + 15); |
| 2451 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); | 2452 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); |
| 2452 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); | 2453 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); |
| 2453 return (kNullCid - kTypedDataInt8ArrayCid); | 2454 return (kNullCid - kTypedDataInt8ArrayCid); |
| 2454 } | 2455 } |
| 2455 | 2456 |
| 2457 |
| 2456 } // namespace dart | 2458 } // namespace dart |
| 2457 | 2459 |
| 2458 #endif // RUNTIME_VM_RAW_OBJECT_H_ | 2460 #endif // RUNTIME_VM_RAW_OBJECT_H_ |
| OLD | NEW |