Index: runtime/vm/object.cc |
=================================================================== |
--- runtime/vm/object.cc (revision 38356) |
+++ runtime/vm/object.cc (working copy) |
@@ -10359,14 +10359,13 @@ |
intptr_t len = 1; // Trailing '\0'. |
Iterator iter(*this, RawPcDescriptors::kAnyKind); |
while (iter.HasNext()) { |
hausner
2014/07/17 23:22:56
See other comment. This loop would become:
while
srdjan
2014/07/18 18:16:45
Good suggestion, changed to:
while (iter.MoveNext
|
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
+ uword pc = iter.NextPc(); |
len += OS::SNPrint(NULL, 0, kFormat, addr_width, |
- rec.pc(), |
- KindAsStr(rec.kind()), |
- rec.deopt_id(), |
- rec.token_pos(), |
- rec.try_index()); |
+ pc, |
+ KindAsStr(iter.current_kind()), |
+ iter.current_deopt_id(), |
+ iter.current_token_pos(), |
+ iter.current_try_index()); |
} |
// Allocate the buffer. |
char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len); |
@@ -10374,14 +10373,13 @@ |
intptr_t index = 0; |
Iterator iter2(*this, RawPcDescriptors::kAnyKind); |
while (iter2.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter2.NextRec(&rec); |
+ uword pc = iter2.NextPc(); |
index += OS::SNPrint((buffer + index), (len - index), kFormat, addr_width, |
- rec.pc(), |
- KindAsStr(rec.kind()), |
- rec.deopt_id(), |
- rec.token_pos(), |
- rec.try_index()); |
+ pc, |
+ KindAsStr(iter.current_kind()), |
+ iter.current_deopt_id(), |
+ iter.current_token_pos(), |
+ iter.current_try_index()); |
} |
return buffer; |
} |
@@ -10396,14 +10394,13 @@ |
JSONArray members(jsobj, "members"); |
Iterator iter(*this, RawPcDescriptors::kAnyKind); |
while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
+ uword pc = iter.NextPc(); |
JSONObject descriptor(&members); |
- descriptor.AddPropertyF("pc", "%" Px "", rec.pc()); |
- descriptor.AddProperty("kind", KindAsStr(rec.kind())); |
- descriptor.AddProperty("deoptId", static_cast<intptr_t>(rec.deopt_id())); |
- descriptor.AddProperty("tokenPos", static_cast<intptr_t>(rec.token_pos())); |
- descriptor.AddProperty("tryIndex", static_cast<intptr_t>(rec.try_index())); |
+ descriptor.AddPropertyF("pc", "%" Px "", pc); |
+ descriptor.AddProperty("kind", KindAsStr(iter.current_kind())); |
+ descriptor.AddProperty("deoptId", iter.current_deopt_id()); |
+ descriptor.AddProperty("tokenPos", iter.current_token_pos()); |
+ descriptor.AddProperty("tryIndex", iter.current_try_index()); |
} |
} |
@@ -10435,11 +10432,10 @@ |
} |
Iterator iter(*this, RawPcDescriptors::kDeopt | RawPcDescriptors::kIcCall); |
while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
+ const intptr_t deopt_id = iter.NextDeoptId(); |
// 'deopt_id' is set for kDeopt and kIcCall and must be unique for one kind. |
- if (Isolate::IsDeoptAfter(rec.deopt_id())) { |
+ if (Isolate::IsDeoptAfter(deopt_id)) { |
// TODO(vegorov): some instructions contain multiple calls and have |
// multiple "after" targets recorded. Right now it is benign but might |
// lead to issues in the future. Fix that and enable verification. |
@@ -10448,10 +10444,9 @@ |
Iterator nested(iter); |
while (nested.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec nested_rec; |
- nested.NextRec(&nested_rec); |
- if (rec.kind() == nested_rec.kind()) { |
- ASSERT(nested_rec.deopt_id() != rec.deopt_id()); |
+ intptr_t nested_deopt_id = nested.NextDeoptId(); |
+ if (iter.current_kind() == nested.current_kind()) { |
+ ASSERT(nested_deopt_id != iter.current_deopt_id()); |
} |
} |
} |
@@ -11961,10 +11956,9 @@ |
const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); |
PcDescriptors::Iterator iter(descriptors, RawPcDescriptors::kAnyKind); |
while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
- if (rec.pc() == pc) { |
- return rec.token_pos(); |
+ const uword current_pc = iter.NextPc(); |
+ if (current_pc == pc) { |
+ return iter.current_token_pos(); |
} |
} |
return -1; |
@@ -11976,10 +11970,9 @@ |
const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); |
PcDescriptors::Iterator iter(descriptors, kind); |
while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
- if (rec.deopt_id() == deopt_id) { |
- uword pc = rec.pc(); |
+ const intptr_t current_deopt_id = iter.NextDeoptId(); |
+ if (current_deopt_id == deopt_id) { |
+ uword pc = iter.current_pc(); |
ASSERT(ContainsInstructionAt(pc)); |
return pc; |
} |
@@ -11992,10 +11985,9 @@ |
const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); |
PcDescriptors::Iterator iter(descriptors, RawPcDescriptors::kOsrEntry); |
while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
- if (rec.pc() == pc) { |
- return rec.deopt_id(); |
+ const uword current_pc = iter.NextPc(); |
+ if (current_pc == pc) { |
+ return iter.current_deopt_id(); |
} |
} |
return Isolate::kNoDeoptId; |