Index: runtime/vm/object.h |
=================================================================== |
--- runtime/vm/object.h (revision 38237) |
+++ runtime/vm/object.h (working copy) |
@@ -2999,32 +2999,35 @@ |
int64_t token_pos, // Or deopt reason. |
intptr_t try_index) const { // Or deopt index. |
RawPcDescriptors::PcDescriptorRec* rec = recAt(index); |
- rec->pc = pc; |
- rec->kind_ = kind; |
+ rec->set_pc(pc); |
+ rec->set_kind(kind); |
ASSERT(Utils::IsInt(32, deopt_id)); |
- rec->deopt_id = deopt_id; |
+ rec->set_deopt_id(deopt_id); |
ASSERT(Utils::IsInt(32, token_pos)); |
- rec->token_pos = token_pos; |
+ rec->set_token_pos(token_pos, |
+ RecordSizeInBytes() == RawPcDescriptors::kCompressedRecSize); |
ASSERT(Utils::IsInt(16, try_index)); |
- rec->try_index = try_index; |
+ rec->set_try_index(try_index); |
+ ASSERT(rec->try_index() == try_index); |
+ ASSERT(rec->token_pos() == token_pos); |
} |
- static const intptr_t kBytesPerElement = |
- sizeof(RawPcDescriptors::PcDescriptorRec); |
- static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; |
+ static const intptr_t kMaxBytesPerElement = |
+ RawPcDescriptors::kFullRecSize; |
+ static const intptr_t kMaxElements = kSmiMax / kMaxBytesPerElement; |
static intptr_t InstanceSize() { |
ASSERT(sizeof(RawPcDescriptors) == |
OFFSET_OF_RETURNED_VALUE(RawPcDescriptors, data)); |
return 0; |
} |
- static intptr_t InstanceSize(intptr_t len) { |
+ static intptr_t InstanceSize(intptr_t len, intptr_t record_size_in_bytes) { |
ASSERT(0 <= len && len <= kMaxElements); |
return RoundedAllocationSize( |
- sizeof(RawPcDescriptors) + (len * kBytesPerElement)); |
+ sizeof(RawPcDescriptors) + (len * record_size_in_bytes)); |
} |
- static RawPcDescriptors* New(intptr_t num_descriptors); |
+ static RawPcDescriptors* New(intptr_t num_descriptors, bool has_try_index); |
// Returns 0 if not found. |
uword GetPcForKind(RawPcDescriptors::Kind kind) const; |
@@ -3071,7 +3074,7 @@ |
while (current_ix_ < descriptors_.Length()) { |
const RawPcDescriptors::PcDescriptorRec& rec = |
*descriptors_.recAt(current_ix_); |
- if ((rec.kind_ & kind_mask_) != 0) { |
+ if ((rec.kind() & kind_mask_) != 0) { |
return; // Current is valid. |
} else { |
++current_ix_; |
@@ -3088,12 +3091,16 @@ |
static const char* KindAsStr(RawPcDescriptors::Kind kind); |
intptr_t Length() const; |
+ void SetLength(intptr_t value) const; |
+ void SetRecordSizeInBytes(intptr_t value) const; |
+ intptr_t RecordSizeInBytes() const; |
+ |
RawPcDescriptors::PcDescriptorRec* recAt(intptr_t ix) const { |
ASSERT(ix < Length()); |
- return &raw_ptr()->data()[ix]; |
+ uint8_t* d = raw_ptr()->data() + (ix * RecordSizeInBytes()); |
+ return reinterpret_cast<RawPcDescriptors::PcDescriptorRec*>(d); |
} |
- void SetLength(intptr_t value) const; |
FINAL_HEAP_OBJECT_IMPLEMENTATION(PcDescriptors, Object); |
friend class Class; |