Source code: com/techtrader/modules/tools/bytecode/Constants.java
1 package com.techtrader.modules.tools.bytecode;
2
3
4 /**
5 * Interface to track constants used in bytecode. Entities can access these
6 * constants using the static <code>Constants.</code> field prefix,
7 * or implement this interface themselves to conveniently import the
8 * constants into their own namespace.
9 *
10 * @author Abe White
11 */
12 public interface Constants
13 {
14 // class magic number
15 public static final int VALID_MAGIC = 0xcafebabe;
16
17 // access constants for classes, fields, methods
18 public static final int ACCESS_PUBLIC = 0x0001;
19 public static final int ACCESS_PRIVATE = 0x0002;
20 public static final int ACCESS_PROTECTED = 0x0004;
21 public static final int ACCESS_STATIC = 0x0008;
22 public static final int ACCESS_FINAL = 0x0010;
23 public static final int ACCESS_SUPER = 0x0020;
24 public static final int ACCESS_SYNCHRONIZED = 0x0020;
25 public static final int ACCESS_VOLATILE = 0x0040;
26 public static final int ACCESS_TRANSIENT = 0x0080;
27 public static final int ACCESS_NATIVE = 0x0100;
28 public static final int ACCESS_INTERFACE = 0x0200;
29 public static final int ACCESS_ABSTRACT = 0x0400;
30 public static final int ACCESS_STRICT = 0x0800;
31
32 // attribute types the compiler must support
33 public static final String ATTR_CODE = "Code";
34 public static final String ATTR_CONST = "ConstantValue";
35 public static final String ATTR_DEPRECATED = "Deprecated";
36 public static final String ATTR_EXCEPTIONS = "Exceptions";
37 public static final String ATTR_INNERCLASS = "InnerClasses";
38 public static final String ATTR_LINENUMBERS = "LineNumberTable";
39 public static final String ATTR_LOCALS = "LocalVariableTable";
40 public static final String ATTR_SOURCE = "SourceFile";
41 public static final String ATTR_SYNTHETIC = "Synthetic";
42 public static final String ATTR_UNKNOWN = "Unknown";
43
44 // opcodes
45 public static final int NOP = 0;
46 public static final int ACONST_NULL = 1;
47 public static final int ICONST_M1 = 2;
48 public static final int ICONST_0 = 3;
49 public static final int ICONST_1 = 4;
50 public static final int ICONST_2 = 5;
51 public static final int ICONST_3 = 6;
52 public static final int ICONST_4 = 7;
53 public static final int ICONST_5 = 8;
54 public static final int LCONST_0 = 9;
55 public static final int LCONST_1 = 10;
56 public static final int FCONST_0 = 11;
57 public static final int FCONST_1 = 12;
58 public static final int FCONST_2 = 13;
59 public static final int DCONST_0 = 14;
60 public static final int DCONST_1 = 15;
61 public static final int BIPUSH = 16;
62 public static final int SIPUSH = 17;
63 public static final int LDC = 18;
64 public static final int LDC_W = 19;
65 public static final int LDC2_W = 20;
66 public static final int ILOAD = 21;
67 public static final int LLOAD = 22;
68 public static final int FLOAD = 23;
69 public static final int DLOAD = 24;
70 public static final int ALOAD = 25;
71 public static final int ILOAD_0 = 26;
72 public static final int ILOAD_1 = 27;
73 public static final int ILOAD_2 = 28;
74 public static final int ILOAD_3 = 29;
75 public static final int LLOAD_0 = 30;
76 public static final int LLOAD_1 = 31;
77 public static final int LLOAD_2 = 32;
78 public static final int LLOAD_3 = 33;
79 public static final int FLOAD_0 = 34;
80 public static final int FLOAD_1 = 35;
81 public static final int FLOAD_2 = 36;
82 public static final int FLOAD_3 = 37;
83 public static final int DLOAD_0 = 38;
84 public static final int DLOAD_1 = 39;
85 public static final int DLOAD_2 = 40;
86 public static final int DLOAD_3 = 41;
87 public static final int ALOAD_0 = 42;
88 public static final int ALOAD_1 = 43;
89 public static final int ALOAD_2 = 44;
90 public static final int ALOAD_3 = 45;
91 public static final int IALOAD = 46;
92 public static final int LALOAD = 47;
93 public static final int FALOAD = 48;
94 public static final int DALOAD = 49;
95 public static final int AALOAD = 50;
96 public static final int BALOAD = 51;
97 public static final int CALOAD = 52;
98 public static final int SALOAD = 53;
99 public static final int ISTORE = 54;
100 public static final int LSTORE = 55;
101 public static final int FSTORE = 56;
102 public static final int DSTORE = 57;
103 public static final int ASTORE = 58;
104 public static final int ISTORE_0 = 59;
105 public static final int ISTORE_1 = 60;
106 public static final int ISTORE_2 = 61;
107 public static final int ISTORE_3 = 62;
108 public static final int LSTORE_0 = 63;
109 public static final int LSTORE_1 = 64;
110 public static final int LSTORE_2 = 65;
111 public static final int LSTORE_3 = 66;
112 public static final int FSTORE_0 = 67;
113 public static final int FSTORE_1 = 68;
114 public static final int FSTORE_2 = 69;
115 public static final int FSTORE_3 = 70;
116 public static final int DSTORE_0 = 71;
117 public static final int DSTORE_1 = 72;
118 public static final int DSTORE_2 = 73;
119 public static final int DSTORE_3 = 74;
120 public static final int ASTORE_0 = 75;
121 public static final int ASTORE_1 = 76;
122 public static final int ASTORE_2 = 77;
123 public static final int ASTORE_3 = 78;
124 public static final int IASTORE = 79;
125 public static final int LASTORE = 80;
126 public static final int FASTORE = 81;
127 public static final int DASTORE = 82;
128 public static final int AASTORE = 83;
129 public static final int BASTORE = 84;
130 public static final int CASTORE = 85;
131 public static final int SASTORE = 86;
132 public static final int POP = 87;
133 public static final int POP2 = 88;
134 public static final int DUP = 89;
135 public static final int DUP_X1 = 90;
136 public static final int DUP_X2 = 91;
137 public static final int DUP2 = 92;
138 public static final int DUP2_X1 = 93;
139 public static final int DUP2_X2 = 94;
140 public static final int SWAP = 95;
141 public static final int IADD = 96;
142 public static final int LADD = 97;
143 public static final int FADD = 98;
144 public static final int DADD = 99;
145 public static final int ISUB = 100;
146 public static final int LSUB = 101;
147 public static final int FSUB = 102;
148 public static final int DSUB = 103;
149 public static final int IMUL = 104;
150 public static final int LMUL = 105;
151 public static final int FMUL = 106;
152 public static final int DMUL = 107;
153 public static final int IDIV = 108;
154 public static final int LDIV = 109;
155 public static final int FDIV = 110;
156 public static final int DDIV = 111;
157 public static final int IREM = 112;
158 public static final int LREM = 113;
159 public static final int FREM = 114;
160 public static final int DREM = 115;
161 public static final int INEG = 116;
162 public static final int LNEG = 117;
163 public static final int FNEG = 118;
164 public static final int DNEG = 119;
165 public static final int ISHL = 120;
166 public static final int LSHL = 121;
167 public static final int ISHR = 122;
168 public static final int LSHR = 123;
169 public static final int IUSHR = 124;
170 public static final int LUSHR = 125;
171 public static final int IAND = 126;
172 public static final int LAND = 127;
173 public static final int IOR = 128;
174 public static final int LOR = 129;
175 public static final int IXOR = 130;
176 public static final int LXOR = 131;
177 public static final int IINC = 132;
178 public static final int I2L = 133;
179 public static final int I2F = 134;
180 public static final int I2D = 135;
181 public static final int L2I = 136;
182 public static final int L2F = 137;
183 public static final int L2D = 138;
184 public static final int F2I = 139;
185 public static final int F2L = 140;
186 public static final int F2D = 141;
187 public static final int D2I = 142;
188 public static final int D2L = 143;
189 public static final int D2F = 144;
190 public static final int I2B = 145;
191 public static final int I2C = 146;
192 public static final int I2S = 147;
193 public static final int LCMP = 148;
194 public static final int FCMPL = 149;
195 public static final int FCMPG = 150;
196 public static final int DCMPL = 151;
197 public static final int DCMPG = 152;
198 public static final int IF_EQ = 153;
199 public static final int IF_NE = 154;
200 public static final int IF_LT = 155;
201 public static final int IF_GE = 156;
202 public static final int IF_GT = 157;
203 public static final int IF_LE = 158;
204 public static final int IF_ICMPEQ = 159;
205 public static final int IF_ICMPNE = 160;
206 public static final int IF_ICMPLT = 161;
207 public static final int IF_ICMPGE = 162;
208 public static final int IF_ICMPGT = 163;
209 public static final int IF_ICMPLE = 164;
210 public static final int IF_ACMPEQ = 165;
211 public static final int IF_ACMPNE = 166;
212 public static final int GOTO = 167;
213 public static final int JSR = 168;
214 public static final int RET = 169;
215 public static final int TABLESWITCH = 170;
216 public static final int LOOKUPSWITCH = 171;
217 public static final int IRETURN = 172;
218 public static final int LRETURN = 173;
219 public static final int FRETURN = 174;
220 public static final int DRETURN = 175;
221 public static final int ARETURN = 176;
222 public static final int RETURN = 177;
223 public static final int GETSTATIC = 178;
224 public static final int PUTSTATIC = 179;
225 public static final int GETFIELD = 180;
226 public static final int PUTFIELD = 181;
227 public static final int INVOKEVIRTUAL = 182;
228 public static final int INVOKESPECIAL = 183;
229 public static final int INVOKESTATIC = 184;
230 public static final int INVOKEINTERFACE = 185;
231 public static final int NEW = 187;
232 public static final int NEWARRAY = 188;
233 public static final int ANEWARRAY = 189;
234 public static final int ARRAYLENGTH = 190;
235 public static final int ATHROW = 191;
236 public static final int CHECKCAST = 192;
237 public static final int INSTANCEOF = 193;
238 public static final int MONITORENTER = 194;
239 public static final int MONITOREXIT = 195;
240 public static final int WIDE = 196;
241 public static final int MULTIANEWARRAY = 197;
242 public static final int IF_NULL = 198;
243 public static final int IF_NONNULL = 199;
244 public static final int GOTO_W = 200;
245 public static final int JSR_W = 201;
246
247 // array types
248 public static final int ARRAY_BOOLEAN = 4;
249 public static final int ARRAY_CHAR = 5;
250 public static final int ARRAY_FLOAT = 6;
251 public static final int ARRAY_DOUBLE = 7;
252 public static final int ARRAY_BYTE = 8;
253 public static final int ARRAY_SHORT = 9;
254 public static final int ARRAY_INT = 10;
255 public static final int ARRAY_LONG = 11;
256
257 // math operations
258 public static final int MATH_ADD = IADD;
259 public static final int MATH_SUB = ISUB;
260 public static final int MATH_MUL = IMUL;
261 public static final int MATH_DIV = IDIV;
262 public static final int MATH_REM = IREM;
263 public static final int MATH_NEG = INEG;
264 public static final int MATH_SHL = ISHL;
265 public static final int MATH_SHR = ISHR;
266 public static final int MATH_USHR = IUSHR;
267 public static final int MATH_AND = IAND;
268 public static final int MATH_OR = IOR;
269 public static final int MATH_XOR = IXOR;
270
271 // human-readable opcode names
272 public static final String[] OPCODE_NAMES = new String[] {
273 "nop",
274 "aconst_null",
275 "iconst_m1",
276 "iconst_0",
277 "iconst_1",
278 "iconst_2",
279 "iconst_3",
280 "iconst_4",
281 "iconst_5",
282 "lconst_0",
283 "lconst_1",
284 "fconst_0",
285 "fconst_1",
286 "fconst_2",
287 "dconst_0",
288 "dconst_1",
289 "bipush",
290 "sipush",
291 "ldc",
292 "ldc_w",
293 "ldc2_w",
294 "iload",
295 "lload",
296 "fload",
297 "dload",
298 "aload",
299 "iload_0",
300 "iload_1",
301 "iload_2",
302 "iload_3",
303 "lload_0",
304 "lload_1",
305 "lload_2",
306 "lload_3",
307 "fload_0",
308 "fload_1",
309 "fload_2",
310 "fload_3",
311 "dload_0",
312 "dload_1",
313 "dload_2",
314 "dload_3",
315 "aload_0",
316 "aload_1",
317 "aload_2",
318 "aload_3",
319 "iaload",
320 "laload",
321 "faload",
322 "daload",
323 "aaload",
324 "baload",
325 "caload",
326 "saload",
327 "istore",
328 "lstore",
329 "fstore",
330 "dstore",
331 "astore",
332 "istore_0",
333 "istore_1",
334 "istore_2",
335 "istore_3",
336 "lstore_0",
337 "lstore_1",
338 "lstore_2",
339 "lstore_3",
340 "fstore_0",
341 "fstore_1",
342 "fstore_2",
343 "fstore_3",
344 "dstore_0",
345 "dstore_1",
346 "dstore_2",
347 "dstore_3",
348 "astore_0",
349 "astore_1",
350 "astore_2",
351 "astore_3",
352 "iastore",
353 "lastore",
354 "fastore",
355 "dastore",
356 "aastore",
357 "bastore",
358 "castore",
359 "sastore",
360 "pop",
361 "pop2",
362 "dup",
363 "dup_x1",
364 "dup_x2",
365 "dup2",
366 "dup2_x1",
367 "dup2_x2",
368 "swap",
369 "iadd",
370 "ladd",
371 "fadd",
372 "dadd",
373 "isub",
374 "lsub",
375 "fsub",
376 "dsub",
377 "imul",
378 "lmul",
379 "fmul",
380 "dmul",
381 "idiv",
382 "ldiv",
383 "fdiv",
384 "ddiv",
385 "irem",
386 "lrem",
387 "frem",
388 "drem",
389 "ineg",
390 "lneg",
391 "fneg",
392 "dneg",
393 "ishl",
394 "lshl",
395 "ishr",
396 "lshr",
397 "iushr",
398 "lushr",
399 "iand",
400 "land",
401 "ior",
402 "lor",
403 "ixor",
404 "lxor",
405 "iinc",
406 "i2l",
407 "i2f",
408 "i2d",
409 "l2i",
410 "l2f",
411 "l2d",
412 "f2i",
413 "f2l",
414 "f2d",
415 "d2i",
416 "d2l",
417 "d2f",
418 "i2b",
419 "i2c",
420 "i2s",
421 "lcmp",
422 "fcmpl",
423 "fcmpg",
424 "dcmpl",
425 "dcmpg",
426 "if_eq",
427 "if_ne",
428 "if_lt",
429 "if_ge",
430 "if_gt",
431 "if_le",
432 "if_icmpeq",
433 "if_icmpne",
434 "if_icmplt",
435 "if_icmpge",
436 "if_icmpgt",
437 "if_icmple",
438 "if_acmpeq",
439 "if_acmpne",
440 "goto",
441 "jsr",
442 "ret",
443 "tableswitch",
444 "lookupswitch",
445 "ireturn",
446 "lreturn",
447 "freturn",
448 "dreturn",
449 "areturn",
450 "return",
451 "getstatic",
452 "putstatic",
453 "getfield",
454 "putfield",
455 "invokevirtual",
456 "invokespecial",
457 "invokestatic",
458 "invokeinterface",
459 "??",
460 "new",
461 "newarray",
462 "anewarray",
463 "arraylength",
464 "athrow",
465 "checkcast",
466 "instanceof",
467 "monitorenter",
468 "monitorexit",
469 "wide",
470 "multianewarray",
471 "if_null",
472 "if_nonnull",
473 "goto_w",
474 "jsr_w",
475 };
476 }