diff options
author | jeffhao <jeffhao@google.com> | 2011-02-16 15:55:26 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-02-16 15:55:26 -0800 |
commit | d375ef167d9f8202d97e7b09cd8fb3bb322f7c16 (patch) | |
tree | e91b4f8fc4439e216070821c4a7c5dead68fc4d4 | |
parent | 6ec3ba0fc348aecb70cf098c64688a735622ad07 (diff) | |
parent | 6b386bfb92ef6efe8f963270fc5a4b756fca225e (diff) | |
download | android_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.java | 9 | ||||
-rw-r--r-- | dx/src/com/android/dx/cf/code/Ropper.java | 6 |
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); } |