]> source.dussan.org Git - aspectj.git/commitdiff
243192: optimizing handling of constant instructions (eg. ALOAD_0)
authoraclement <aclement>
Wed, 13 Aug 2008 18:19:11 +0000 (18:19 +0000)
committeraclement <aclement>
Wed, 13 Aug 2008 18:19:11 +0000 (18:19 +0000)
weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java
weaver/src/org/aspectj/weaver/bcel/ShadowRange.java

index 01b575faa948de201c1c311d7daafef32d6b94c0..ca3d095de4d610205570f58932c52f9c25ad8e96 100644 (file)
@@ -38,6 +38,7 @@ import org.aspectj.apache.bcel.generic.InstructionCP;
 import org.aspectj.apache.bcel.generic.InstructionConstants;
 import org.aspectj.apache.bcel.generic.InstructionFactory;
 import org.aspectj.apache.bcel.generic.InstructionHandle;
+import org.aspectj.apache.bcel.generic.InstructionLV;
 import org.aspectj.apache.bcel.generic.InstructionList;
 import org.aspectj.apache.bcel.generic.InstructionSelect;
 import org.aspectj.apache.bcel.generic.InstructionTargeter;
@@ -1946,7 +1947,11 @@ class BcelClassWeaver implements IClassWeaver {
                                } else {
                                        freshIndex = frameEnv.get(oldIndex);
                                }
-                               fresh.setIndex(freshIndex);
+                               if (fresh instanceof RET) {
+                                       fresh.setIndex(freshIndex);
+                               } else {
+                                       fresh = ((InstructionLV)fresh).setIndexAndCopyIfNecessary(freshIndex);
+                               }
                                dest = ret.append(fresh);
                        } else {
                                dest = ret.append(fresh);
@@ -2079,7 +2084,11 @@ class BcelClassWeaver implements IClassWeaver {
 //                                     } else {
                                                freshIndex = oldIndex;//frameEnv.get(oldIndex);
 //                                     }
-                                       fresh.setIndex(freshIndex);
+                                       if (fresh instanceof RET) {
+                                               fresh.setIndex(freshIndex);
+                                       } else {
+                                               fresh = ((InstructionLV)fresh).setIndexAndCopyIfNecessary(freshIndex);
+                                       }
                                        dest = newList.append(fresh);
                                } else {
                                        dest = newList.append(fresh);
index 93f0dba4fdcc487b7a3990753e65ab718280b4ef..e43a6992ec25e60f712f56636e59c6206146d5ac 100644 (file)
@@ -17,6 +17,7 @@ import org.aspectj.apache.bcel.generic.Instruction;
 import org.aspectj.apache.bcel.generic.InstructionBranch;
 import org.aspectj.apache.bcel.generic.InstructionFactory;
 import org.aspectj.apache.bcel.generic.InstructionHandle;
+import org.aspectj.apache.bcel.generic.InstructionLV;
 import org.aspectj.apache.bcel.generic.InstructionList;
 import org.aspectj.apache.bcel.generic.InstructionSelect;
 import org.aspectj.apache.bcel.generic.InstructionTargeter;
@@ -169,7 +170,12 @@ final class ShadowRange extends Range {
                 } else {
                     freshIndex = remap.get(oldIndex);
                 }
-                freshI.setIndex(freshIndex);
+                if (freshI instanceof RET) {
+                       freshI.setIndex(freshIndex);
+                } else {
+                    freshI = ((InstructionLV)freshI).setIndexAndCopyIfNecessary(freshIndex);
+                    freshIh.setInstruction(freshI);
+                }
             }
 //            System.err.println("JUST COPIED: " + oldIh.getInstruction().toString(freshMethod.getEnclosingClass().getConstantPoolGen().getConstantPool()) 
 //             + " INTO " + freshIh.getInstruction().toString(freshMethod.getEnclosingClass().getConstantPoolGen().getConstantPool()));