Add support for empty packed switch data instructions

This commit is contained in:
Ben Gruver 2013-04-18 21:17:23 -07:00
parent 4879652a47
commit c89097680e
2 changed files with 21 additions and 11 deletions

View File

@ -345,14 +345,18 @@ public class CodeItem {
out.indent();
out.annotate(2, "size = %d", elements.size());
out.annotate(4, "first_key = %d", elements.get(0).getKey());
out.annotate(0, "targets:");
out.indent();
for (int i=0; i<elements.size(); i++) {
out.annotate(4, "target[%d] = %d", i, elements.get(i).getOffset());
if (elements.size() == 0) {
out.annotate(4, "first_key");
} else {
out.annotate(4, "first_key = %d", elements.get(0).getKey());
out.annotate(0, "targets:");
out.indent();
for (int i=0; i<elements.size(); i++) {
out.annotate(4, "target[%d] = %d", i, elements.get(i).getOffset());
}
out.deindent();
}
out.deindent();
out.deindent();
}
private void annotateSparseSwitchPayload(@Nonnull AnnotatedBytes out,

View File

@ -525,7 +525,8 @@ public class CodeItemPool {
public void writeSparseSwitchPayload(@Nonnull DexWriter writer, @Nonnull SparseSwitchPayload instruction)
throws IOException {
writer.writeUshort(instruction.getOpcode().value);
writer.writeUbyte(0);
writer.writeUbyte(instruction.getOpcode().value >> 8);
List<? extends SwitchElement> elements = instruction.getSwitchElements();
writer.writeUshort(elements.size());
for (SwitchElement element: elements) {
@ -538,12 +539,17 @@ public class CodeItemPool {
public void writePackedSwitchPayload(@Nonnull DexWriter writer, @Nonnull PackedSwitchPayload instruction)
throws IOException {
writer.writeUshort(instruction.getOpcode().value);
writer.writeUbyte(0);
writer.writeUbyte(instruction.getOpcode().value >> 8);
List<? extends SwitchElement> elements = instruction.getSwitchElements();
writer.writeUshort(elements.size());
writer.writeInt(elements.get(0).getKey());
for (SwitchElement element: elements) {
writer.writeInt(element.getOffset());
if (elements.size() == 0) {
writer.writeInt(0);
} else {
writer.writeInt(elements.get(0).getKey());
for (SwitchElement element: elements) {
writer.writeInt(element.getOffset());
}
}
}
}