Lines 17-22
Link Here
|
17 |
import java.io.PrintStream; |
17 |
import java.io.PrintStream; |
18 |
import java.lang.reflect.Modifier; |
18 |
import java.lang.reflect.Modifier; |
19 |
import java.util.ArrayList; |
19 |
import java.util.ArrayList; |
|
|
20 |
import java.util.Collections; |
21 |
import java.util.Comparator; |
20 |
import java.util.HashMap; |
22 |
import java.util.HashMap; |
21 |
import java.util.HashSet; |
23 |
import java.util.HashSet; |
22 |
import java.util.Iterator; |
24 |
import java.util.Iterator; |
Lines 254-263
Link Here
|
254 |
LocalVariableGen lng = (LocalVariableGen) targeter; |
256 |
LocalVariableGen lng = (LocalVariableGen) targeter; |
255 |
LocalVariableTag lr = new LocalVariableTag(BcelWorld.fromBcel(lng.getType()), lng.getName(), lng.getIndex()); |
257 |
LocalVariableTag lr = new LocalVariableTag(BcelWorld.fromBcel(lng.getType()), lng.getName(), lng.getIndex()); |
256 |
if (lng.getStart() == ih) { |
258 |
if (lng.getStart() == ih) { |
257 |
lng.setStart(null); |
|
|
258 |
locals.add(lr); |
259 |
locals.add(lr); |
259 |
} else { |
260 |
} else { |
260 |
lng.setEnd(null); |
|
|
261 |
ends.add(lr); |
261 |
ends.add(lr); |
262 |
} |
262 |
} |
263 |
} |
263 |
} |
Lines 833-847
Link Here
|
833 |
} |
833 |
} |
834 |
} else if (targeter instanceof LocalVariableTag) { |
834 |
} else if (targeter instanceof LocalVariableTag) { |
835 |
LocalVariableTag lvt = (LocalVariableTag) targeter; |
835 |
LocalVariableTag lvt = (LocalVariableTag) targeter; |
836 |
if (i instanceof LocalVariableInstruction) { |
836 |
if (localVariableStarts.get(lvt) == null) { |
837 |
int index = ((LocalVariableInstruction)i).getIndex(); |
837 |
localVariableStarts.put(lvt, jh); |
838 |
if (lvt.getSlot() == index) { |
|
|
839 |
if (localVariableStarts.get(lvt) == null) { |
840 |
localVariableStarts.put(lvt, jh); |
841 |
} |
842 |
localVariableEnds.put(lvt, jh); |
843 |
} |
844 |
} |
838 |
} |
|
|
839 |
localVariableEnds.put(lvt, jh); |
845 |
} |
840 |
} |
846 |
} |
841 |
} |
847 |
} |
842 |
} |
Lines 871-877
Link Here
|
871 |
|
866 |
|
872 |
Map duplicatedLocalMap = new HashMap(); |
867 |
Map duplicatedLocalMap = new HashMap(); |
873 |
|
868 |
|
874 |
for (Iterator iter = localVariableStarts.keySet().iterator(); iter.hasNext(); ) { |
869 |
// Reverse sort these keys |
|
|
870 |
List keys = new ArrayList(); |
871 |
|
872 |
keys.addAll(localVariableStarts.keySet()); |
873 |
// System.err.println("Keys for local variable tags"); |
874 |
// for (int i = 0;i <keys.size();i++) { |
875 |
// System.err.println("Before sort: #"+i+"="+keys.get(i)); |
876 |
// } |
877 |
Collections.sort(keys,new Comparator() { |
878 |
public int compare(Object a,Object b) { |
879 |
LocalVariableTag taga = (LocalVariableTag)a; |
880 |
LocalVariableTag tagb = (LocalVariableTag)b; |
881 |
if (taga.getName().startsWith("arg")) { |
882 |
if (tagb.getName().startsWith("arg")) { |
883 |
return -taga.getName().compareTo(tagb.getName()); |
884 |
} else { |
885 |
return 1; // Whatever tagb is, it must come out before 'arg' |
886 |
} |
887 |
} else if (tagb.getName().startsWith("arg")) { |
888 |
return -1; // Whatever taga is, it must come out before 'arg' |
889 |
} else { |
890 |
return -taga.getName().compareTo(tagb.getName()); |
891 |
} |
892 |
}}); |
893 |
// for (int i = 0;i <keys.size();i++) { |
894 |
// System.err.println("After sort: #"+i+"="+keys.get(i)); |
895 |
// } |
896 |
|
897 |
for (Iterator iter = keys.iterator(); iter.hasNext(); ) { |
875 |
LocalVariableTag tag = (LocalVariableTag) iter.next(); |
898 |
LocalVariableTag tag = (LocalVariableTag) iter.next(); |
876 |
// have we already added one with the same slot number and start location? |
899 |
// have we already added one with the same slot number and start location? |
877 |
// if so, just continue. |
900 |
// if so, just continue. |