1.1 --- a/javap/src/main/java/org/apidesign/javap/StackMapIterator.java Thu Nov 29 20:19:00 2012 +0100
1.2 +++ b/javap/src/main/java/org/apidesign/javap/StackMapIterator.java Fri Dec 07 15:02:35 2012 +0100
1.3 @@ -29,17 +29,21 @@
1.4 private static final StackMapTableData INITIAL_FRAME =
1.5 new StackMapTableData(-1) {
1.6 @Override
1.7 - int getStackItemsCount() {
1.8 - return 0;
1.9 + void applyTo(TypeArray localTypes, TypeArray stackTypes) {
1.10 + localTypes.clear();
1.11 + stackTypes.clear();
1.12 }
1.13
1.14 @Override
1.15 public String toString() {
1.16 - return "INITIAL(0)";
1.17 + return toString("INITIAL", 0, null, null);
1.18 }
1.19 +
1.20 };
1.21
1.22 private final StackMapTableData[] stackMapTable;
1.23 + private final TypeArray localTypes;
1.24 + private final TypeArray stackTypes;
1.25
1.26 private int nextFrameIndex;
1.27 private int lastFrameByteCodeOffset;
1.28 @@ -50,7 +54,10 @@
1.29 this.stackMapTable = (stackMapTable != null)
1.30 ? stackMapTable
1.31 : new StackMapTableData[0];
1.32 - this.lastFrameByteCodeOffset = -1;
1.33 +
1.34 + localTypes = new TypeArray();
1.35 + stackTypes = new TypeArray();
1.36 + lastFrameByteCodeOffset = -1;
1.37 advanceBy(0);
1.38 }
1.39
1.40 @@ -62,8 +69,8 @@
1.41 return nextFrameIndex;
1.42 }
1.43
1.44 - public int getFrameStackItemsCount() {
1.45 - return getCurrentFrame().getStackItemsCount();
1.46 + public TypeArray getFrameStack() {
1.47 + return stackTypes;
1.48 }
1.49
1.50 public void advanceBy(final int numByteCodes) {
1.51 @@ -76,8 +83,11 @@
1.52 && ((byteCodeOffset - lastFrameByteCodeOffset)
1.53 >= (stackMapTable[nextFrameIndex].offsetDelta
1.54 + 1))) {
1.55 - lastFrameByteCodeOffset +=
1.56 - stackMapTable[nextFrameIndex].offsetDelta + 1;
1.57 + final StackMapTableData nextFrame = stackMapTable[nextFrameIndex];
1.58 +
1.59 + lastFrameByteCodeOffset += nextFrame.offsetDelta + 1;
1.60 + nextFrame.applyTo(localTypes, stackTypes);
1.61 +
1.62 ++nextFrameIndex;
1.63 }
1.64 }