View Javadoc

1   package serp.bytecode;
2   
3   /**
4    * Interface to track constants used in bytecode. Entities can access these
5    * constants using the static <code>Constants.</code> field prefix,
6    * or implement this interface themselves to conveniently import the
7    * constants into their own namespace.
8    *
9    * @author Abe White
10   */
11  public interface Constants {
12      // class magic number
13      public static final int VALID_MAGIC = 0xcafebabe;
14  
15      // standard major, minor versions
16      public static final int MAJOR_VERSION = 45;
17      public static final int MINOR_VERSION = 3;
18      public static final int MAJOR_VERSION_JAVA5 = 49;
19      public static final int MINOR_VERSION_JAVA5 = 0;
20  
21      // access constants for classes, fields, methods
22      public static final int ACCESS_PUBLIC = 0x0001;
23      public static final int ACCESS_PRIVATE = 0x0002;
24      public static final int ACCESS_PROTECTED = 0x0004;
25      public static final int ACCESS_STATIC = 0x0008;
26      public static final int ACCESS_FINAL = 0x0010;
27      public static final int ACCESS_SUPER = 0x0020;
28      public static final int ACCESS_SYNCHRONIZED = 0x0020;
29      public static final int ACCESS_VOLATILE = 0x0040;
30      public static final int ACCESS_BRIDGE = 0x0040;
31      public static final int ACCESS_TRANSIENT = 0x0080;
32      public static final int ACCESS_VARARGS = 0x0080;
33      public static final int ACCESS_NATIVE = 0x0100;
34      public static final int ACCESS_INTERFACE = 0x0200;
35      public static final int ACCESS_ABSTRACT = 0x0400;
36      public static final int ACCESS_STRICT = 0x0800;
37      public static final int ACCESS_SYNTHETIC = 0x1000;
38      public static final int ACCESS_ANNOTATION = 0x2000;
39      public static final int ACCESS_ENUM = 0x4000;
40  
41      // attribute types the compiler must support
42      public static final String ATTR_CODE = "Code";
43      public static final String ATTR_CONST = "ConstantValue";
44      public static final String ATTR_DEPRECATED = "Deprecated";
45      public static final String ATTR_EXCEPTIONS = "Exceptions";
46      public static final String ATTR_INNERCLASS = "InnerClasses";
47      public static final String ATTR_LINENUMBERS = "LineNumberTable";
48      public static final String ATTR_LOCALS = "LocalVariableTable";
49      public static final String ATTR_LOCAL_TYPES = "LocalVariableTypeTable";
50      public static final String ATTR_SOURCE = "SourceFile";
51      public static final String ATTR_SYNTHETIC = "Synthetic";
52      public static final String ATTR_UNKNOWN = "Unknown";
53      public static final String ATTR_ANNOTATIONS = "RuntimeInvisibleAnnotations";
54      public static final String ATTR_RUNTIME_ANNOTATIONS = 
55          "RuntimeVisibleAnnotations";
56  
57      // opcodes
58      public static final int NOP = 0;
59      public static final int ACONSTNULL = 1;
60      public static final int ICONSTM1 = 2;
61      public static final int ICONST0 = 3;
62      public static final int ICONST1 = 4;
63      public static final int ICONST2 = 5;
64      public static final int ICONST3 = 6;
65      public static final int ICONST4 = 7;
66      public static final int ICONST5 = 8;
67      public static final int LCONST0 = 9;
68      public static final int LCONST1 = 10;
69      public static final int FCONST0 = 11;
70      public static final int FCONST1 = 12;
71      public static final int FCONST2 = 13;
72      public static final int DCONST0 = 14;
73      public static final int DCONST1 = 15;
74      public static final int BIPUSH = 16;
75      public static final int SIPUSH = 17;
76      public static final int LDC = 18;
77      public static final int LDCW = 19;
78      public static final int LDC2W = 20;
79      public static final int ILOAD = 21;
80      public static final int LLOAD = 22;
81      public static final int FLOAD = 23;
82      public static final int DLOAD = 24;
83      public static final int ALOAD = 25;
84      public static final int ILOAD0 = 26;
85      public static final int ILOAD1 = 27;
86      public static final int ILOAD2 = 28;
87      public static final int ILOAD3 = 29;
88      public static final int LLOAD0 = 30;
89      public static final int LLOAD1 = 31;
90      public static final int LLOAD2 = 32;
91      public static final int LLOAD3 = 33;
92      public static final int FLOAD0 = 34;
93      public static final int FLOAD1 = 35;
94      public static final int FLOAD2 = 36;
95      public static final int FLOAD3 = 37;
96      public static final int DLOAD0 = 38;
97      public static final int DLOAD1 = 39;
98      public static final int DLOAD2 = 40;
99      public static final int DLOAD3 = 41;
100     public static final int ALOAD0 = 42;
101     public static final int ALOAD1 = 43;
102     public static final int ALOAD2 = 44;
103     public static final int ALOAD3 = 45;
104     public static final int IALOAD = 46;
105     public static final int LALOAD = 47;
106     public static final int FALOAD = 48;
107     public static final int DALOAD = 49;
108     public static final int AALOAD = 50;
109     public static final int BALOAD = 51;
110     public static final int CALOAD = 52;
111     public static final int SALOAD = 53;
112     public static final int ISTORE = 54;
113     public static final int LSTORE = 55;
114     public static final int FSTORE = 56;
115     public static final int DSTORE = 57;
116     public static final int ASTORE = 58;
117     public static final int ISTORE0 = 59;
118     public static final int ISTORE1 = 60;
119     public static final int ISTORE2 = 61;
120     public static final int ISTORE3 = 62;
121     public static final int LSTORE0 = 63;
122     public static final int LSTORE1 = 64;
123     public static final int LSTORE2 = 65;
124     public static final int LSTORE3 = 66;
125     public static final int FSTORE0 = 67;
126     public static final int FSTORE1 = 68;
127     public static final int FSTORE2 = 69;
128     public static final int FSTORE3 = 70;
129     public static final int DSTORE0 = 71;
130     public static final int DSTORE1 = 72;
131     public static final int DSTORE2 = 73;
132     public static final int DSTORE3 = 74;
133     public static final int ASTORE0 = 75;
134     public static final int ASTORE1 = 76;
135     public static final int ASTORE2 = 77;
136     public static final int ASTORE3 = 78;
137     public static final int IASTORE = 79;
138     public static final int LASTORE = 80;
139     public static final int FASTORE = 81;
140     public static final int DASTORE = 82;
141     public static final int AASTORE = 83;
142     public static final int BASTORE = 84;
143     public static final int CASTORE = 85;
144     public static final int SASTORE = 86;
145     public static final int POP = 87;
146     public static final int POP2 = 88;
147     public static final int DUP = 89;
148     public static final int DUPX1 = 90;
149     public static final int DUPX2 = 91;
150     public static final int DUP2 = 92;
151     public static final int DUP2X1 = 93;
152     public static final int DUP2X2 = 94;
153     public static final int SWAP = 95;
154     public static final int IADD = 96;
155     public static final int LADD = 97;
156     public static final int FADD = 98;
157     public static final int DADD = 99;
158     public static final int ISUB = 100;
159     public static final int LSUB = 101;
160     public static final int FSUB = 102;
161     public static final int DSUB = 103;
162     public static final int IMUL = 104;
163     public static final int LMUL = 105;
164     public static final int FMUL = 106;
165     public static final int DMUL = 107;
166     public static final int IDIV = 108;
167     public static final int LDIV = 109;
168     public static final int FDIV = 110;
169     public static final int DDIV = 111;
170     public static final int IREM = 112;
171     public static final int LREM = 113;
172     public static final int FREM = 114;
173     public static final int DREM = 115;
174     public static final int INEG = 116;
175     public static final int LNEG = 117;
176     public static final int FNEG = 118;
177     public static final int DNEG = 119;
178     public static final int ISHL = 120;
179     public static final int LSHL = 121;
180     public static final int ISHR = 122;
181     public static final int LSHR = 123;
182     public static final int IUSHR = 124;
183     public static final int LUSHR = 125;
184     public static final int IAND = 126;
185     public static final int LAND = 127;
186     public static final int IOR = 128;
187     public static final int LOR = 129;
188     public static final int IXOR = 130;
189     public static final int LXOR = 131;
190     public static final int IINC = 132;
191     public static final int I2L = 133;
192     public static final int I2F = 134;
193     public static final int I2D = 135;
194     public static final int L2I = 136;
195     public static final int L2F = 137;
196     public static final int L2D = 138;
197     public static final int F2I = 139;
198     public static final int F2L = 140;
199     public static final int F2D = 141;
200     public static final int D2I = 142;
201     public static final int D2L = 143;
202     public static final int D2F = 144;
203     public static final int I2B = 145;
204     public static final int I2C = 146;
205     public static final int I2S = 147;
206     public static final int LCMP = 148;
207     public static final int FCMPL = 149;
208     public static final int FCMPG = 150;
209     public static final int DCMPL = 151;
210     public static final int DCMPG = 152;
211     public static final int IFEQ = 153;
212     public static final int IFNE = 154;
213     public static final int IFLT = 155;
214     public static final int IFGE = 156;
215     public static final int IFGT = 157;
216     public static final int IFLE = 158;
217     public static final int IFICMPEQ = 159;
218     public static final int IFICMPNE = 160;
219     public static final int IFICMPLT = 161;
220     public static final int IFICMPGE = 162;
221     public static final int IFICMPGT = 163;
222     public static final int IFICMPLE = 164;
223     public static final int IFACMPEQ = 165;
224     public static final int IFACMPNE = 166;
225     public static final int GOTO = 167;
226     public static final int JSR = 168;
227     public static final int RET = 169;
228     public static final int TABLESWITCH = 170;
229     public static final int LOOKUPSWITCH = 171;
230     public static final int IRETURN = 172;
231     public static final int LRETURN = 173;
232     public static final int FRETURN = 174;
233     public static final int DRETURN = 175;
234     public static final int ARETURN = 176;
235     public static final int RETURN = 177;
236     public static final int GETSTATIC = 178;
237     public static final int PUTSTATIC = 179;
238     public static final int GETFIELD = 180;
239     public static final int PUTFIELD = 181;
240     public static final int INVOKEVIRTUAL = 182;
241     public static final int INVOKESPECIAL = 183;
242     public static final int INVOKESTATIC = 184;
243     public static final int INVOKEINTERFACE = 185;
244     public static final int NEW = 187;
245     public static final int NEWARRAY = 188;
246     public static final int ANEWARRAY = 189;
247     public static final int ARRAYLENGTH = 190;
248     public static final int ATHROW = 191;
249     public static final int CHECKCAST = 192;
250     public static final int INSTANCEOF = 193;
251     public static final int MONITORENTER = 194;
252     public static final int MONITOREXIT = 195;
253     public static final int WIDE = 196;
254     public static final int MULTIANEWARRAY = 197;
255     public static final int IFNULL = 198;
256     public static final int IFNONNULL = 199;
257     public static final int GOTOW = 200;
258     public static final int JSRW = 201;
259 
260     // array types
261     public static final int ARRAY_BOOLEAN = 4;
262     public static final int ARRAY_CHAR = 5;
263     public static final int ARRAY_FLOAT = 6;
264     public static final int ARRAY_DOUBLE = 7;
265     public static final int ARRAY_BYTE = 8;
266     public static final int ARRAY_SHORT = 9;
267     public static final int ARRAY_INT = 10;
268     public static final int ARRAY_LONG = 11;
269 
270     // math operations
271     public static final int MATH_ADD = IADD;
272     public static final int MATH_SUB = ISUB;
273     public static final int MATH_MUL = IMUL;
274     public static final int MATH_DIV = IDIV;
275     public static final int MATH_REM = IREM;
276     public static final int MATH_NEG = INEG;
277     public static final int MATH_SHL = ISHL;
278     public static final int MATH_SHR = ISHR;
279     public static final int MATH_USHR = IUSHR;
280     public static final int MATH_AND = IAND;
281     public static final int MATH_OR = IOR;
282     public static final int MATH_XOR = IXOR;
283 
284     // human-readable opcode names
285     public static final String[] OPCODE_NAMES = new String[] {
286         "nop", "aconstnull", "iconstm1", "iconst0", "iconst1", "iconst2",
287         "iconst3", "iconst4", "iconst5", "lconst0", "lconst1", "fconst0",
288         "fconst1", "fconst2", "dconst0", "dconst1", "bipush", "sipush",
289         "ldc", "ldcw", "ldc2w", "iload", "lload", "fload", "dload", "aload",
290         "iload0", "iload1", "iload2", "iload3", "lload0", "lload1", "lload2",
291         "lload3", "fload0", "fload1", "fload2", "fload3", "dload0", "dload1",
292         "dload2", "dload3", "aload0", "aload1", "aload2", "aload3", "iaload",
293         "laload", "faload", "daload", "aaload", "baload", "caload", "saload",
294         "istore", "lstore", "fstore", "dstore", "astore", "istore0",
295         "istore1", "istore2", "istore3", "lstore0", "lstore1", "lstore2",
296         "lstore3", "fstore0", "fstore1", "fstore2", "fstore3", "dstore0",
297         "dstore1", "dstore2", "dstore3", "astore0", "astore1", "astore2",
298         "astore3", "iastore", "lastore", "fastore", "dastore", "aastore",
299         "bastore", "castore", "sastore", "pop", "pop2", "dup", "dupx1",
300         "dupx2", "dup2", "dup2x1", "dup2x2", "swap", "iadd", "ladd", "fadd",
301         "dadd", "isub", "lsub", "fsub", "dsub", "imul", "lmul", "fmul",
302         "dmul", "idiv", "ldiv", "fdiv", "ddiv", "irem", "lrem", "frem",
303         "drem", "ineg", "lneg", "fneg", "dneg", "ishl", "lshl", "ishr",
304         "lshr", "iushr", "lushr", "iand", "land", "ior", "lor", "ixor",
305         "lxor", "iinc", "i2l", "i2f", "i2d", "l2i", "l2f", "l2d", "f2i",
306         "f2l", "f2d", "d2i", "d2l", "d2f", "i2b", "i2c", "i2s", "lcmp",
307         "fcmpl", "fcmpg", "dcmpl", "dcmpg", "ifeq", "ifne", "iflt", "ifge",
308         "ifgt", "ifle", "ificmpeq", "ificmpne", "ificmplt", "ificmpge",
309         "ificmpgt", "ificmple", "ifacmpeq", "ifacmpne", "goto", "jsr", "ret",
310         "tableswitch", "lookupswitch", "ireturn", "lreturn", "freturn",
311         "dreturn", "areturn", "return", "getstatic", "putstatic", "getfield",
312         "putfield", "invokevirtual", "invokespecial", "invokestatic",
313         "invokeinterface", "??", "new", "newarray", "anewarray",
314         "arraylength", "athrow", "checkcast", "instanceof", "monitorenter",
315         "monitorexit", "wide", "multianewarray", "ifnull", "ifnonnull",
316         "gotow", "jsrw",
317     };
318 }