summaryrefslogtreecommitdiff
path: root/dexlayout/dex_ir.cc
diff options
context:
space:
mode:
author Mathieu Chartier <mathieuc@google.com> 2017-09-23 16:11:06 -0700
committer Mathieu Chartier <mathieuc@google.com> 2017-09-27 11:51:53 -0700
commit1d2d4ff8570bb88d9d2d4633706fd7f6fb18d75e (patch)
treecbe67e8e9214828656314117121e8ce906a762ab /dexlayout/dex_ir.cc
parente5b35ed787fbfb388d162361310bae5b0e7682a7 (diff)
Add DexInstructionIterator and use it a few places
Motivation: Want to start abstracting away dex specific functionality to enable CompactDex. Adding an iterator will enable CompactDex iteration to work differently than normal dex iteration. Will eventually replace CodeItemIterator. Bug: 63756964 Test: test-art-host Change-Id: I90e67c1a994b7698aaac0523a82816b0a003fbdc
Diffstat (limited to 'dexlayout/dex_ir.cc')
-rw-r--r--dexlayout/dex_ir.cc13
1 files changed, 3 insertions, 10 deletions
diff --git a/dexlayout/dex_ir.cc b/dexlayout/dex_ir.cc
index 5913832f96..0c944cee2c 100644
--- a/dexlayout/dex_ir.cc
+++ b/dexlayout/dex_ir.cc
@@ -185,21 +185,14 @@ static bool GetIdsFromByteCode(Collections& collections,
std::vector<MethodId*>* method_ids,
std::vector<FieldId*>* field_ids) {
bool has_id = false;
- // Iterate over all instructions.
- const uint16_t* insns = code->Insns();
- for (uint32_t insn_idx = 0; insn_idx < code->InsnsSize();) {
- const Instruction* instruction = Instruction::At(&insns[insn_idx]);
- const uint32_t insn_width = instruction->SizeInCodeUnits();
- if (insn_width == 0) {
- break;
- }
+ for (const Instruction& instruction : code->Instructions()) {
+ CHECK_GT(instruction.SizeInCodeUnits(), 0u);
has_id |= GetIdFromInstruction(collections,
- instruction,
+ &instruction,
type_ids,
string_ids,
method_ids,
field_ids);
- insn_idx += insn_width;
} // for
return has_id;
}