aboutsummaryrefslogtreecommitdiffstats
path: root/weaver/src
diff options
context:
space:
mode:
authoraclement <aclement>2008-09-30 22:55:35 +0000
committeraclement <aclement>2008-09-30 22:55:35 +0000
commit7a398a2d4cfe14c36662ac6b984303f8ba920362 (patch)
treeaf5e817f87e09897117a5129dc6983253ccdc9e8 /weaver/src
parent9b68a31302174ba06218e5e1182653297f722110 (diff)
downloadaspectj-7a398a2d4cfe14c36662ac6b984303f8ba920362.tar.gz
aspectj-7a398a2d4cfe14c36662ac6b984303f8ba920362.zip
186884: fix
Diffstat (limited to 'weaver/src')
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelShadow.java8
1 files changed, 6 insertions, 2 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
index c753f7472..20110f517 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
@@ -229,7 +229,10 @@ public class BcelShadow extends Shadow {
InstructionHandle dupHandle = endHandle;
endHandle = endHandle.getNext();
nextHandle = endHandle.getNext();
+ boolean skipEndRepositioning = false;
if (endHandle.getInstruction().opcode == Constants.SWAP) {
+ } else if (endHandle.getInstruction().opcode == Constants.IMPDEP1) {
+ skipEndRepositioning = true; // pr186884
} else {
// XXX see next XXX comment
throw new RuntimeException("Unhandled kind of new " + endHandle);
@@ -237,7 +240,9 @@ public class BcelShadow extends Shadow {
// Now make any jumps to the 'new', the 'dup' or the 'end' now target the nextHandle
retargetFrom(newHandle, nextHandle);
retargetFrom(dupHandle, nextHandle);
- retargetFrom(endHandle, nextHandle);
+ if (!skipEndRepositioning) {
+ retargetFrom(endHandle, nextHandle);
+ }
} else {
endHandle = newHandle;
nextHandle = endHandle.getNext();
@@ -261,7 +266,6 @@ public class BcelShadow extends Shadow {
for (int i = sources.length - 1; i >= 0; i--) {
if (sources[i] instanceof ExceptionRange) {
ExceptionRange it = (ExceptionRange) sources[i];
- System.err.println("...");
it.updateTarget(old, fresh, it.getBody());
} else {
sources[i].updateTarget(old, fresh);