Refactor DexInstructionIterator
Add a way to get the dex PC for the "for each" use case.
Bug: 67104794
Test: test-art-host
Change-Id: I144c459c9a2a03ec8d56842280338d1f7ce1caf0
diff --git a/dexlayout/dexlayout.cc b/dexlayout/dexlayout.cc
index 9a2ab66..dd2e809 100644
--- a/dexlayout/dexlayout.cc
+++ b/dexlayout/dexlayout.cc
@@ -1054,15 +1054,13 @@
code_offset, code_offset, dot.c_str(), name, type_descriptor.c_str());
// Iterate over all instructions.
- IterationRange<DexInstructionIterator> instructions = code->Instructions();
- for (auto inst = instructions.begin(); inst != instructions.end(); ++inst) {
- const uint32_t dex_pc = inst.GetDexPC(instructions.begin());
+ for (const DexInstructionPcPair& inst : code->Instructions()) {
const uint32_t insn_width = inst->SizeInCodeUnits();
if (insn_width == 0) {
- fprintf(stderr, "GLITCH: zero-width instruction at idx=0x%04x\n", dex_pc);
+ fprintf(stderr, "GLITCH: zero-width instruction at idx=0x%04x\n", inst.DexPc());
break;
}
- DumpInstruction(code, code_offset, dex_pc, insn_width, &*inst);
+ DumpInstruction(code, code_offset, inst.DexPc(), insn_width, &inst.Inst());
} // for
}