diff -r 3ee23267706c -r f2352e0b713e javap/src/main/java/org/apidesign/javap/StackMapIterator.java --- a/javap/src/main/java/org/apidesign/javap/StackMapIterator.java Thu Nov 29 20:19:00 2012 +0100 +++ b/javap/src/main/java/org/apidesign/javap/StackMapIterator.java Fri Dec 07 15:02:35 2012 +0100 @@ -29,17 +29,21 @@ private static final StackMapTableData INITIAL_FRAME = new StackMapTableData(-1) { @Override - int getStackItemsCount() { - return 0; + void applyTo(TypeArray localTypes, TypeArray stackTypes) { + localTypes.clear(); + stackTypes.clear(); } @Override public String toString() { - return "INITIAL(0)"; + return toString("INITIAL", 0, null, null); } + }; private final StackMapTableData[] stackMapTable; + private final TypeArray localTypes; + private final TypeArray stackTypes; private int nextFrameIndex; private int lastFrameByteCodeOffset; @@ -50,7 +54,10 @@ this.stackMapTable = (stackMapTable != null) ? stackMapTable : new StackMapTableData[0]; - this.lastFrameByteCodeOffset = -1; + + localTypes = new TypeArray(); + stackTypes = new TypeArray(); + lastFrameByteCodeOffset = -1; advanceBy(0); } @@ -62,8 +69,8 @@ return nextFrameIndex; } - public int getFrameStackItemsCount() { - return getCurrentFrame().getStackItemsCount(); + public TypeArray getFrameStack() { + return stackTypes; } public void advanceBy(final int numByteCodes) { @@ -76,8 +83,11 @@ && ((byteCodeOffset - lastFrameByteCodeOffset) >= (stackMapTable[nextFrameIndex].offsetDelta + 1))) { - lastFrameByteCodeOffset += - stackMapTable[nextFrameIndex].offsetDelta + 1; + final StackMapTableData nextFrame = stackMapTable[nextFrameIndex]; + + lastFrameByteCodeOffset += nextFrame.offsetDelta + 1; + nextFrame.applyTo(localTypes, stackTypes); + ++nextFrameIndex; } }