1.1 --- a/javap/src/main/java/org/apidesign/javap/StackMapTableData.java Fri Nov 16 08:08:36 2012 +0100
1.2 +++ b/javap/src/main/java/org/apidesign/javap/StackMapTableData.java Thu Nov 29 20:19:00 2012 +0100
1.3 @@ -32,7 +32,7 @@
1.4
1.5 /* represents one entry of StackMapTable attribute
1.6 */
1.7 -class StackMapTableData {
1.8 +abstract class StackMapTableData {
1.9 final int frameType;
1.10 int offsetDelta;
1.11
1.12 @@ -40,11 +40,26 @@
1.13 this.frameType = frameType;
1.14 }
1.15
1.16 + abstract int getStackItemsCount();
1.17 +
1.18 static class SameFrame extends StackMapTableData {
1.19 SameFrame(int frameType, int offsetDelta) {
1.20 super(frameType);
1.21 this.offsetDelta = offsetDelta;
1.22 }
1.23 +
1.24 + @Override
1.25 + int getStackItemsCount() {
1.26 + return 0;
1.27 + }
1.28 +
1.29 + @Override
1.30 + public String toString() {
1.31 + return "SAME"
1.32 + + ((frameType == SAME_FRAME_EXTENDED)
1.33 + ? "_FRAME_EXTENDED" : "")
1.34 + + "(" + offsetDelta + ")";
1.35 + }
1.36 }
1.37
1.38 static class SameLocals1StackItem extends StackMapTableData {
1.39 @@ -54,6 +69,19 @@
1.40 this.offsetDelta = offsetDelta;
1.41 this.stack = stack;
1.42 }
1.43 +
1.44 + @Override
1.45 + int getStackItemsCount() {
1.46 + return 1;
1.47 + }
1.48 +
1.49 + @Override
1.50 + public String toString() {
1.51 + return "SAME_LOCALS_1_STACK_ITEM"
1.52 + + ((frameType == SAME_LOCALS_1_STACK_ITEM_EXTENDED)
1.53 + ? "_EXTENDED" : "")
1.54 + + "(" + offsetDelta + ")";
1.55 + }
1.56 }
1.57
1.58 static class ChopFrame extends StackMapTableData {
1.59 @@ -61,6 +89,16 @@
1.60 super(frameType);
1.61 this.offsetDelta = offsetDelta;
1.62 }
1.63 +
1.64 + @Override
1.65 + int getStackItemsCount() {
1.66 + return 0;
1.67 + }
1.68 +
1.69 + @Override
1.70 + public String toString() {
1.71 + return "CHOP(" + offsetDelta + ")";
1.72 + }
1.73 }
1.74
1.75 static class AppendFrame extends StackMapTableData {
1.76 @@ -70,6 +108,16 @@
1.77 this.offsetDelta = offsetDelta;
1.78 this.locals = locals;
1.79 }
1.80 +
1.81 + @Override
1.82 + int getStackItemsCount() {
1.83 + return 0;
1.84 + }
1.85 +
1.86 + @Override
1.87 + public String toString() {
1.88 + return "APPEND(" + offsetDelta + ")";
1.89 + }
1.90 }
1.91
1.92 static class FullFrame extends StackMapTableData {
1.93 @@ -81,6 +129,16 @@
1.94 this.locals = locals;
1.95 this.stack = stack;
1.96 }
1.97 +
1.98 + @Override
1.99 + int getStackItemsCount() {
1.100 + return stack.length;
1.101 + }
1.102 +
1.103 + @Override
1.104 + public String toString() {
1.105 + return "FULL(" + offsetDelta + ")";
1.106 + }
1.107 }
1.108
1.109 static StackMapTableData getInstance(DataInputStream in, MethodData method)