Index: runtime/vm/raw_object.h |
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h |
index a94bf639db959e11f7f30744da48bc31356dc0a6..4e04cb0e03b4d75dc376bec80a386395f19bb020 100644 |
--- a/runtime/vm/raw_object.h |
+++ b/runtime/vm/raw_object.h |
@@ -271,10 +271,6 @@ class RawObject { |
kSizeTagSize = 8, |
kClassIdTagPos = kSizeTagPos + kSizeTagSize, // = 16 |
kClassIdTagSize = 16, |
-#if defined(HASH_IN_OBJECT_HEADER) |
- kHashTagPos = kClassIdTagPos + kClassIdTagSize, // = 32 |
- kHashTagSize = 16, |
-#endif |
}; |
COMPILE_ASSERT(kClassIdTagSize == (sizeof(classid_t) * kBitsPerByte)); |
@@ -300,7 +296,7 @@ class RawObject { |
private: |
// The actual unscaled bit field used within the tag field. |
class SizeBits |
- : public BitField<uint32_t, intptr_t, kSizeTagPos, kSizeTagSize> {}; |
+ : public BitField<uword, intptr_t, kSizeTagPos, kSizeTagSize> {}; |
static intptr_t SizeToTagValue(intptr_t size) { |
ASSERT(Utils::IsAligned(size, kObjectAlignment)); |
@@ -312,7 +308,7 @@ class RawObject { |
}; |
class ClassIdTag |
- : public BitField<uint32_t, intptr_t, kClassIdTagPos, kClassIdTagSize> {}; |
+ : public BitField<uword, intptr_t, kClassIdTagPos, kClassIdTagSize> {}; |
bool IsWellFormed() const { |
uword value = reinterpret_cast<uword>(this); |
@@ -356,7 +352,7 @@ class RawObject { |
} |
void SetMarkBitUnsynchronized() { |
ASSERT(!IsMarked()); |
- uint32_t tags = ptr()->tags_; |
+ uword tags = ptr()->tags_; |
ptr()->tags_ = MarkBit::update(true, tags); |
} |
void ClearMarkBit() { |
@@ -382,12 +378,12 @@ class RawObject { |
} |
void SetRememberedBitUnsynchronized() { |
ASSERT(!IsRemembered()); |
- uint32_t tags = ptr()->tags_; |
+ uword tags = ptr()->tags_; |
ptr()->tags_ = RememberedBit::update(true, tags); |
} |
void ClearRememberedBit() { UpdateTagBit<RememberedBit>(false); } |
void ClearRememberedBitUnsynchronized() { |
- uint32_t tags = ptr()->tags_; |
+ uword tags = ptr()->tags_; |
ptr()->tags_ = RememberedBit::update(false, tags); |
} |
// Returns false if the bit was already set. |
@@ -413,7 +409,6 @@ class RawObject { |
#undef DEFINE_IS_CID |
bool IsStringInstance() const { return IsStringClassId(GetClassId()); } |
- bool IsRawNull() const { return GetClassId() == kNullCid; } |
bool IsDartInstance() const { |
return (!IsHeapObject() || (GetClassId() >= kInstanceCid)); |
} |
@@ -428,7 +423,7 @@ class RawObject { |
} |
intptr_t Size() const { |
- uint32_t tags = ptr()->tags_; |
+ uword tags = ptr()->tags_; |
intptr_t result = SizeTag::decode(tags); |
if (result != 0) { |
#if defined(DEBUG) |
@@ -538,25 +533,18 @@ class RawObject { |
static intptr_t NumberOfTypedDataClasses(); |
private: |
- uint32_t tags_; // Various object tags (bits). |
-#if defined(HASH_IN_OBJECT_HEADER) |
- // On 64 bit there is a hash field in the header for the identity hash. |
- uint32_t hash_; |
-#endif |
+ uword tags_; // Various object tags (bits). |
- class MarkBit : public BitField<uint32_t, bool, kMarkBit, 1> {}; |
+ class MarkBit : public BitField<uword, bool, kMarkBit, 1> {}; |
- class RememberedBit : public BitField<uint32_t, bool, kRememberedBit, 1> {}; |
+ class RememberedBit : public BitField<uword, bool, kRememberedBit, 1> {}; |
- class CanonicalObjectTag : public BitField<uint32_t, bool, kCanonicalBit, 1> { |
- }; |
+ class CanonicalObjectTag : public BitField<uword, bool, kCanonicalBit, 1> {}; |
- class VMHeapObjectTag : public BitField<uint32_t, bool, kVMHeapObjectBit, 1> { |
- }; |
+ class VMHeapObjectTag : public BitField<uword, bool, kVMHeapObjectBit, 1> {}; |
class ReservedBits |
- : public BitField<uint32_t, intptr_t, kReservedTagPos, kReservedTagSize> { |
- }; |
+ : public BitField<uword, intptr_t, kReservedTagPos, kReservedTagSize> {}; |
// TODO(koda): After handling tags_, return const*, like Object::raw_ptr(). |
RawObject* ptr() const { |
@@ -571,37 +559,37 @@ class RawObject { |
intptr_t SizeFromClass() const; |
intptr_t GetClassId() const { |
- uint32_t tags = ptr()->tags_; |
+ uword tags = ptr()->tags_; |
return ClassIdTag::decode(tags); |
} |
void SetClassId(intptr_t new_cid) { |
- uint32_t tags = ptr()->tags_; |
+ uword tags = ptr()->tags_; |
ptr()->tags_ = ClassIdTag::update(new_cid, tags); |
} |
template <class TagBitField> |
void UpdateTagBit(bool value) { |
- uint32_t tags = ptr()->tags_; |
- uint32_t old_tags; |
+ uword tags = ptr()->tags_; |
+ uword old_tags; |
do { |
old_tags = tags; |
- uint32_t new_tags = TagBitField::update(value, old_tags); |
- tags = AtomicOperations::CompareAndSwapUint32(&ptr()->tags_, old_tags, |
- new_tags); |
+ uword new_tags = TagBitField::update(value, old_tags); |
+ tags = AtomicOperations::CompareAndSwapWord(&ptr()->tags_, old_tags, |
+ new_tags); |
} while (tags != old_tags); |
} |
template <class TagBitField> |
bool TryAcquireTagBit() { |
- uint32_t tags = ptr()->tags_; |
- uint32_t old_tags; |
+ uword tags = ptr()->tags_; |
+ uword old_tags; |
do { |
old_tags = tags; |
if (TagBitField::decode(tags)) return false; |
- uint32_t new_tags = TagBitField::update(true, old_tags); |
- tags = AtomicOperations::CompareAndSwapUint32(&ptr()->tags_, old_tags, |
- new_tags); |
+ uword new_tags = TagBitField::update(true, old_tags); |
+ tags = AtomicOperations::CompareAndSwapWord(&ptr()->tags_, old_tags, |
+ new_tags); |
} while (tags != old_tags); |
return true; |
} |
@@ -1330,10 +1318,7 @@ class RawPcDescriptors : public RawObject { |
private: |
RAW_HEAP_OBJECT_IMPLEMENTATION(PcDescriptors); |
- // Number of descriptors. This only needs to be an int32_t, but we make it a |
- // uword so that the variable length data is 64 bit aligned on 64 bit |
- // platforms. |
- uword length_; |
+ int32_t length_; // Number of descriptors. |
// Variable length data follows here. |
uint8_t* data() { OPEN_ARRAY_START(uint8_t, intptr_t); } |
@@ -1349,9 +1334,7 @@ class RawCodeSourceMap : public RawObject { |
private: |
RAW_HEAP_OBJECT_IMPLEMENTATION(CodeSourceMap); |
- // Length in bytes. This only needs to be an int32_t, but we make it a uword |
- // so that the variable length data is 64 bit aligned on 64 bit platforms. |
- uword length_; |
+ int32_t length_; // Length in bytes. |
// Variable length data follows here. |
uint8_t* data() { OPEN_ARRAY_START(uint8_t, intptr_t); } |
@@ -1378,9 +1361,8 @@ class RawStackMap : public RawObject { |
int32_t slow_path_bit_count_; // Slow path live values, included in length_. |
// Offset from code entry point corresponding to this stack map |
- // representation. This only needs to be an int32_t, but we make it a uword |
- // so that the variable length data is 64 bit aligned on 64 bit platforms. |
- uword pc_offset_; |
+ // representation. |
+ uint32_t pc_offset_; |
// Variable length data follows here (bitmap of the stack layout). |
uint8_t* data() { OPEN_ARRAY_START(uint8_t, uint8_t); } |
@@ -1434,10 +1416,7 @@ class RawLocalVarDescriptors : public RawObject { |
private: |
RAW_HEAP_OBJECT_IMPLEMENTATION(LocalVarDescriptors); |
- // Number of descriptors. This only needs to be an int32_t, but we make it a |
- // uword so that the variable length data is 64 bit aligned on 64 bit |
- // platforms. |
- uword num_entries_; |
+ int32_t num_entries_; // Number of descriptors. |
RawObject** from() { |
return reinterpret_cast<RawObject**>(&ptr()->names()[0]); |
@@ -1945,9 +1924,8 @@ class RawOneByteString : public RawString { |
const uint8_t* data() const { OPEN_ARRAY_START(uint8_t, uint8_t); } |
friend class ApiMessageReader; |
- friend class RODataSerializationCluster; |
friend class SnapshotReader; |
- friend class String; |
+ friend class RODataSerializationCluster; |
}; |
@@ -1958,9 +1936,8 @@ class RawTwoByteString : public RawString { |
uint16_t* data() { OPEN_ARRAY_START(uint16_t, uint16_t); } |
const uint16_t* data() const { OPEN_ARRAY_START(uint16_t, uint16_t); } |
- friend class RODataSerializationCluster; |
friend class SnapshotReader; |
- friend class String; |
+ friend class RODataSerializationCluster; |
}; |
@@ -1996,7 +1973,6 @@ class RawExternalOneByteString : public RawString { |
private: |
ExternalData* external_data_; |
friend class Api; |
- friend class String; |
}; |
@@ -2009,7 +1985,6 @@ class RawExternalTwoByteString : public RawString { |
private: |
ExternalData* external_data_; |
friend class Api; |
- friend class String; |
}; |