# HG changeset patch # User Jaroslav Tulach # Date 1355066736 -3600 # Node ID a2ca83ddc5210422afc2a7385bdd3a35bfa2cfd3 # Parent 6d1e8eccdc980e76116489b6032d9880d0a1db30 Using plain array instead of ArrayDeque diff -r 6d1e8eccdc98 -r a2ca83ddc521 javap/src/main/java/org/apidesign/javap/TrapDataIterator.java --- a/javap/src/main/java/org/apidesign/javap/TrapDataIterator.java Sun Dec 09 16:16:19 2012 +0100 +++ b/javap/src/main/java/org/apidesign/javap/TrapDataIterator.java Sun Dec 09 16:25:36 2012 +0100 @@ -11,7 +11,8 @@ public final class TrapDataIterator { private final java.util.Map exStart = new java.util.HashMap(); private final java.util.Map exStop = new java.util.HashMap(); - private final java.util.Deque current = new java.util.ArrayDeque(); + private TrapData[] current = new TrapData[10]; + private int currentCount; TrapDataIterator(Vector exceptionTable) { for (int i=0 ; i < exceptionTable.size(); i++) { @@ -24,19 +25,45 @@ public void advanceTo(int i) { TrapData e = exStart.get((short) i); if (e != null) { - current.addFirst(e); + add(e); } e = exStop.get((short) i); if (e != null) { - current.remove(e); + remove(e); } } public boolean useTry() { - return !current.isEmpty(); + return currentCount > 0; } public TrapData[] current() { - return current.toArray(new TrapData[0]); + return current; + } + + private void add(TrapData e) { + if (currentCount == current.length) { + TrapData[] data = new TrapData[currentCount * 2]; + for (int i = 0; i < currentCount; i++) { + data[i] = current[i]; + } + current = data; + } + current[currentCount++] = e; + } + + private void remove(TrapData e) { + int from = 0; + while (from < currentCount) { + if (e == current[from++]) { + break; + } + } + while (from < currentCount) { + current[from - 1] = current[from]; + current[from] = null; + from++; + } + currentCount--; } } diff -r 6d1e8eccdc98 -r a2ca83ddc521 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 09 16:16:19 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 09 16:25:36 2012 +0100 @@ -798,6 +798,9 @@ if (trap.useTry()) { out.append("} catch (e) {"); for (TrapData e : trap.current()) { + if (e == null) { + break; + } if (e.catch_cpx != 0) { //not finally final String classInternalName = jc.getClassName(e.catch_cpx); addReference(classInternalName);