summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjeffhao <jeffhao@google.com>2011-02-16 15:55:26 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-02-16 15:55:26 -0800
commitd375ef167d9f8202d97e7b09cd8fb3bb322f7c16 (patch)
treee91b4f8fc4439e216070821c4a7c5dead68fc4d4
parent6ec3ba0fc348aecb70cf098c64688a735622ad07 (diff)
parent6b386bfb92ef6efe8f963270fc5a4b756fca225e (diff)
downloadandroid_dalvik-d375ef167d9f8202d97e7b09cd8fb3bb322f7c16.tar.gz
android_dalvik-d375ef167d9f8202d97e7b09cd8fb3bb322f7c16.tar.bz2
android_dalvik-d375ef167d9f8202d97e7b09cd8fb3bb322f7c16.zip
Merge "Fix for complex jsr nesting causing NullPointerException." into dalvik-dev
-rw-r--r--dx/src/com/android/dx/cf/code/BytecodeArray.java9
-rw-r--r--dx/src/com/android/dx/cf/code/Ropper.java6
2 files changed, 12 insertions, 3 deletions
diff --git a/dx/src/com/android/dx/cf/code/BytecodeArray.java b/dx/src/com/android/dx/cf/code/BytecodeArray.java
index 6ede25c87..f4ea007b9 100644
--- a/dx/src/com/android/dx/cf/code/BytecodeArray.java
+++ b/dx/src/com/android/dx/cf/code/BytecodeArray.java
@@ -1357,23 +1357,27 @@ public final class BytecodeArray {
}
/** {@inheritDoc} */
+ @Override
public void visitInvalid(int opcode, int offset, int length) {
clear();
}
/** {@inheritDoc} */
+ @Override
public void visitNoArgs(int opcode, int offset, int length,
Type type) {
clear();
}
/** {@inheritDoc} */
+ @Override
public void visitLocal(int opcode, int offset, int length,
int idx, Type type, int value) {
clear();
}
/** {@inheritDoc} */
+ @Override
public void visitConstant(int opcode, int offset, int length,
Constant cst, int value) {
this.cst = cst;
@@ -1382,29 +1386,34 @@ public final class BytecodeArray {
}
/** {@inheritDoc} */
+ @Override
public void visitBranch(int opcode, int offset, int length,
int target) {
clear();
}
/** {@inheritDoc} */
+ @Override
public void visitSwitch(int opcode, int offset, int length,
SwitchList cases, int padding) {
clear();
}
/** {@inheritDoc} */
+ @Override
public void visitNewarray(int offset, int length, CstType type,
ArrayList<Constant> initVals) {
clear();
}
/** {@inheritDoc} */
+ @Override
public void setPreviousOffset(int offset) {
// Intentionally left empty
}
/** {@inheritDoc} */
+ @Override
public int getPreviousOffset() {
// Intentionally left empty
return -1;
diff --git a/dx/src/com/android/dx/cf/code/Ropper.java b/dx/src/com/android/dx/cf/code/Ropper.java
index 821716657..715cfd8e9 100644
--- a/dx/src/com/android/dx/cf/code/Ropper.java
+++ b/dx/src/com/android/dx/cf/code/Ropper.java
@@ -1427,7 +1427,7 @@ public final class Ropper {
IntList.makeImmutable (newSubStartLabel),
newSubStartLabel),
labelToSubroutines.get(b.getLabel()));
- }
+ }
/**
* Copies a basic block, mapping its successors along the way.
@@ -1435,7 +1435,7 @@ public final class Ropper {
* @param origLabel original block label
* @param newLabel label that the new block should have
*/
- private void copyBlock(int origLabel, int newLabel) {
+ private void copyBlock(int origLabel, int newLabel) {
BasicBlock origBlock = labelToBlock(origLabel);
@@ -1515,7 +1515,7 @@ public final class Ropper {
*/
private boolean involvedInSubroutine(int label, int subroutineStart) {
IntList subroutinesList = labelToSubroutines.get(label);
- return (subroutinesList.size() > 0
+ return (subroutinesList != null && subroutinesList.size() > 0
&& subroutinesList.top() == subroutineStart);
}