]> source.dussan.org Git - aspectj.git/commitdiff
final part of fix for 100195 - local var debug info for inlined around advice preDefaultReweavable
authoracolyer <acolyer>
Wed, 5 Oct 2005 09:36:51 +0000 (09:36 +0000)
committeracolyer <acolyer>
Wed, 5 Oct 2005 09:36:51 +0000 (09:36 +0000)
weaver/src/org/aspectj/weaver/bcel/LocalVariableTag.java
weaver/src/org/aspectj/weaver/bcel/ShadowRange.java
weaver/testdata/AroundAllAndOthersFancyHelloWorld.txt
weaver/testdata/AroundAllFancyHelloWorld.txt

index 109211329a6cad1228bd1797383aaf11a2d4aafd..14bb30acfcb3db02636f05d41734c6d42f54b5d7 100644 (file)
@@ -18,8 +18,9 @@ import org.aspectj.weaver.UnresolvedType;
 public final class LocalVariableTag extends Tag {
     private final UnresolvedType type;
     private final String name;
-    private final int slot;
+    private int slot;
     private final int startPos;
+    boolean remapped = false;
 
     // AMC - pr101047, two local vars with the same name can share the same slot, but must in that case
     // have different start positions.
@@ -40,6 +41,13 @@ public final class LocalVariableTag extends Tag {
         return type;
     }
     
+    public void updateSlot(int newSlot) {
+       this.slot = newSlot;
+       this.remapped = true;
+    }
+    
+    public boolean isRemapped() { return this.remapped; }
+    
     // ---- from Object
     
     public String toString() {
index b6381f9a71b346ecbfa8ed90d9227082d1d15369..7632c3e16ad937e7da0dad9060d4811367b587d8 100644 (file)
@@ -175,6 +175,25 @@ final class ShadowRange extends Range {
 //            System.err.println("JUST COPIED: " + oldIh.getInstruction().toString(freshMethod.getEnclosingClass().getConstantPoolGen().getConstantPool()) 
 //             + " INTO " + freshIh.getInstruction().toString(freshMethod.getEnclosingClass().getConstantPoolGen().getConstantPool()));
         }
+        
+        // now go through again and update variable slots that have been altered as a result
+        // of remapping...
+        for (InstructionHandle newIh = freshBody.getStart(); newIh != freshBody.getEnd(); newIh = newIh.getNext()) {
+            InstructionTargeter[] sources = newIh.getTargeters();
+            if (sources != null) {
+                for (int i = sources.length - 1; i >= 0; i--) {
+                    if (sources[i] instanceof LocalVariableTag) {
+                       LocalVariableTag lvt = (LocalVariableTag) sources[i];
+                       if (!lvt.isRemapped() && remap.hasKey(lvt.getSlot())) {
+                               lvt.updateSlot(remap.get(lvt.getSlot()));                               
+                       }
+                    }
+                }
+            }
+        }
+       
+        
+        
 
                // we've now copied out all the instructions.
         // now delete the instructions... we've already taken care of the damn
index 709ff60a72280a7ec60e80b7b4c00e8f366addb0..789b9d37ecb80b652de231d9d42277b33a0255ba 100644 (file)
@@ -203,7 +203,7 @@ public abstract class FancyHelloWorld extends java.lang.Object:
                     ASTORE_3   (line 9)
     finally -> E1
     | catch java.lang.Exception -> E0
-    | |             ALOAD_3   (line 11)
+    | |             ALOAD_3     // java.io.PrintStream out   (line 11)
     | |             LDC "bye"
     | |             ASTORE 5
     | |             ASTORE 7
@@ -230,8 +230,8 @@ public abstract class FancyHelloWorld extends java.lang.Object:
     | |             GOTO L0
     | catch java.lang.Exception -> E0
     |           E0: ASTORE 11   (line 12)
-    |               ALOAD_3   (line 13)
-    |               ALOAD 11
+    |               ALOAD_3     // java.io.PrintStream out   (line 13)
+    |               ALOAD 11     // java.lang.Exception e
     |               ASTORE 13
     |               ASTORE 15
     | method-call(void java.io.PrintStream.println(java.lang.Object))
@@ -263,7 +263,7 @@ public abstract class FancyHelloWorld extends java.lang.Object:
                 L0: JSR L1
                     GOTO L2
                 L1: ASTORE 21
-                    ALOAD_3   (line 15)
+                    ALOAD_3     // java.io.PrintStream out   (line 15)
                     LDC "finally"
                     ASTORE 23
                     ASTORE 25
index de2e58197b89c16abab392855dd4c060df2cfcfc..b7a8d862373ce3509a79c335e72893a5810a8f31 100644 (file)
@@ -101,7 +101,7 @@ public abstract class FancyHelloWorld extends java.lang.Object:
                     ASTORE_3   (line 9)
     finally -> E1
     | catch java.lang.Exception -> E0
-    | |             ALOAD_3   (line 11)
+    | |             ALOAD_3     // java.io.PrintStream out   (line 11)
     | |             LDC "bye"
     | |             ASTORE 5
     | |             ASTORE 7
@@ -127,8 +127,8 @@ public abstract class FancyHelloWorld extends java.lang.Object:
     | |             GOTO L0
     | catch java.lang.Exception -> E0
     |           E0: ASTORE 11   (line 12)
-    |               ALOAD_3   (line 13)
-    |               ALOAD 11
+    |               ALOAD_3     // java.io.PrintStream out   (line 13)
+    |               ALOAD 11     // java.lang.Exception e
     |               ASTORE 13
     |               ASTORE 15
     | method-call(void java.io.PrintStream.println(java.lang.Object))
@@ -159,7 +159,7 @@ public abstract class FancyHelloWorld extends java.lang.Object:
                 L0: JSR L1
                     GOTO L2
                 L1: ASTORE 21
-                    ALOAD_3   (line 15)
+                    ALOAD_3     // java.io.PrintStream out   (line 15)
                     LDC "finally"
                     ASTORE 23
                     ASTORE 25