Index: runtime/vm/debugger.cc |
=================================================================== |
--- runtime/vm/debugger.cc (revision 38394) |
+++ runtime/vm/debugger.cc (working copy) |
@@ -362,12 +362,10 @@ |
token_pos_ = Scanner::kNoSourcePos; |
GetPcDescriptors(); |
PcDescriptors::Iterator iter(pc_desc_, RawPcDescriptors::kAnyKind); |
- while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
- if (rec.pc() == pc_) { |
- try_index_ = rec.try_index(); |
- token_pos_ = rec.token_pos(); |
+ while (iter.MoveNext()) { |
+ if (iter.Pc() == pc_) { |
+ try_index_ = iter.TryIndex(); |
+ token_pos_ = iter.TokenPos(); |
break; |
} |
} |
@@ -931,21 +929,18 @@ |
RawPcDescriptors::kRuntimeCall; |
-static bool HasTokenPos(const RawPcDescriptors::PcDescriptorRec& rec) { |
- return rec.token_pos() != Scanner::kNoSourcePos; |
-} |
- |
- |
CodeBreakpoint::CodeBreakpoint(const Code& code, |
- const RawPcDescriptors::PcDescriptorRec& rec) |
+ intptr_t token_pos, |
+ uword pc, |
+ RawPcDescriptors::Kind kind) |
: code_(code.raw()), |
- token_pos_(rec.token_pos()), |
- pc_(rec.pc()), |
+ token_pos_(token_pos), |
+ pc_(pc), |
line_number_(-1), |
is_enabled_(false), |
src_bpt_(NULL), |
next_(NULL), |
- breakpoint_kind_(rec.kind()), |
+ breakpoint_kind_(kind), |
saved_value_(0) { |
ASSERT(!code.IsNull()); |
ASSERT(token_pos_ > 0); |
@@ -1204,18 +1199,17 @@ |
ASSERT(!target_function.HasOptimizedCode()); |
PcDescriptors& desc = PcDescriptors::Handle(isolate, code.pc_descriptors()); |
PcDescriptors::Iterator iter(desc, kSafepointKind); |
- while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
- if (HasTokenPos(rec)) { |
- CodeBreakpoint* bpt = GetCodeBreakpoint(rec.pc()); |
+ while (iter.MoveNext()) { |
+ if (iter.TokenPos() != Scanner::kNoSourcePos) { |
+ CodeBreakpoint* bpt = GetCodeBreakpoint(iter.Pc()); |
if (bpt != NULL) { |
// There is already a breakpoint for this address. Make sure |
// it is enabled. |
bpt->Enable(); |
continue; |
} |
- bpt = new CodeBreakpoint(code, rec); |
+ bpt = new CodeBreakpoint(code, iter.TokenPos(), |
+ iter.Pc(), iter.Kind()); |
RegisterCodeBreakpoint(bpt); |
bpt->Enable(); |
} |
@@ -1256,9 +1250,8 @@ |
const PcDescriptors& pc_desc = |
PcDescriptors::Handle(isolate, code.pc_descriptors()); |
PcDescriptors::Iterator iter(pc_desc, RawPcDescriptors::kClosureCall); |
- while (iter.HasNext()) { |
- const uword rec_pc = iter.NextPc(); |
- if (rec_pc == pc) { |
+ while (iter.MoveNext()) { |
+ if (iter.Pc() == pc) { |
is_closure_call = true; |
break; |
} |
@@ -1552,12 +1545,10 @@ |
uword lowest_pc = kUwordMax; |
intptr_t lowest_pc_token_pos = INT_MAX; |
PcDescriptors::Iterator iter(desc, kSafepointKind); |
- while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
- intptr_t desc_token_pos = rec.token_pos(); |
+ while (iter.MoveNext()) { |
+ const intptr_t desc_token_pos = iter.TokenPos(); |
ASSERT(desc_token_pos >= 0); |
- if (HasTokenPos(rec)) { |
+ if (desc_token_pos != Scanner::kNoSourcePos) { |
if ((desc_token_pos < requested_token_pos) || |
(desc_token_pos > last_token_pos)) { |
// This descriptor is outside the desired token range. |
@@ -1568,9 +1559,9 @@ |
// the first acceptable token position. |
best_fit_pos = desc_token_pos; |
} |
- if (rec.pc() < lowest_pc) { |
+ if (iter.Pc() < lowest_pc) { |
// This descriptor so far has the lowest code address. |
- lowest_pc = rec.pc(); |
+ lowest_pc = iter.Pc(); |
lowest_pc_token_pos = desc_token_pos; |
} |
} |
@@ -1596,34 +1587,33 @@ |
void Debugger::MakeCodeBreakpointAt(const Function& func, |
SourceBreakpoint* bpt) { |
+ ASSERT(bpt->token_pos_ != Scanner::kNoSourcePos); |
ASSERT((bpt != NULL) && bpt->IsResolved()); |
ASSERT(!func.HasOptimizedCode()); |
Code& code = Code::Handle(func.unoptimized_code()); |
ASSERT(!code.IsNull()); |
PcDescriptors& desc = PcDescriptors::Handle(code.pc_descriptors()); |
uword lowest_pc = kUwordMax; |
+ RawPcDescriptors::Kind lowest_kind = RawPcDescriptors::kAnyKind; |
// Find the safe point with the lowest compiled code address |
// that maps to the token position of the source breakpoint. |
PcDescriptors::Iterator iter(desc, kSafepointKind); |
- RawPcDescriptors::PcDescriptorRec lowest_rec; |
- while (iter.HasNext()) { |
- RawPcDescriptors::PcDescriptorRec rec; |
- iter.NextRec(&rec); |
- intptr_t desc_token_pos = rec.token_pos(); |
- if ((desc_token_pos == bpt->token_pos_) && HasTokenPos(rec)) { |
- if (rec.pc() < lowest_pc) { |
- lowest_pc = rec.pc(); |
- lowest_rec = rec; |
+ while (iter.MoveNext()) { |
+ if (iter.TokenPos() == bpt->token_pos_) { |
+ if (iter.Pc() < lowest_pc) { |
+ lowest_pc = iter.Pc(); |
+ lowest_kind = iter.Kind(); |
} |
} |
} |
if (lowest_pc == kUwordMax) { |
return; |
} |
- CodeBreakpoint* code_bpt = GetCodeBreakpoint(lowest_rec.pc()); |
+ CodeBreakpoint* code_bpt = GetCodeBreakpoint(lowest_pc); |
if (code_bpt == NULL) { |
// No code breakpoint for this code exists; create one. |
- code_bpt = new CodeBreakpoint(code, lowest_rec); |
+ code_bpt = new CodeBreakpoint(code, bpt->token_pos_, |
+ lowest_pc, lowest_kind); |
RegisterCodeBreakpoint(code_bpt); |
} |
code_bpt->set_src_bpt(bpt); |