001 /*
002 * Copyright 2002-2005 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026
027 package sun.tools.javap;
028
029 public interface RuntimeConstants {
030
031 /* Signature Characters */
032 public static final char SIGC_VOID = 'V';
033 public static final String SIG_VOID = "V";
034 public static final char SIGC_BOOLEAN = 'Z';
035 public static final String SIG_BOOLEAN = "Z";
036 public static final char SIGC_BYTE = 'B';
037 public static final String SIG_BYTE = "B";
038 public static final char SIGC_CHAR = 'C';
039 public static final String SIG_CHAR = "C";
040 public static final char SIGC_SHORT = 'S';
041 public static final String SIG_SHORT = "S";
042 public static final char SIGC_INT = 'I';
043 public static final String SIG_INT = "I";
044 public static final char SIGC_LONG = 'J';
045 public static final String SIG_LONG = "J";
046 public static final char SIGC_FLOAT = 'F';
047 public static final String SIG_FLOAT = "F";
048 public static final char SIGC_DOUBLE = 'D';
049 public static final String SIG_DOUBLE = "D";
050 public static final char SIGC_ARRAY = '[';
051 public static final String SIG_ARRAY = "[";
052 public static final char SIGC_CLASS = 'L';
053 public static final String SIG_CLASS = "L";
054 public static final char SIGC_METHOD = '(';
055 public static final String SIG_METHOD = "(";
056 public static final char SIGC_ENDCLASS = ';';
057 public static final String SIG_ENDCLASS = ";";
058 public static final char SIGC_ENDMETHOD = ')';
059 public static final String SIG_ENDMETHOD = ")";
060 public static final char SIGC_PACKAGE = '/';
061 public static final String SIG_PACKAGE = "/";
062
063 /* Class File Constants */
064 public static final int JAVA_MAGIC = 0xcafebabe;
065 public static final int JAVA_VERSION = 45;
066 public static final int JAVA_MINOR_VERSION = 3;
067
068 /* Constant table */
069 public static final int CONSTANT_UTF8 = 1;
070 public static final int CONSTANT_UNICODE = 2;
071 public static final int CONSTANT_INTEGER = 3;
072 public static final int CONSTANT_FLOAT = 4;
073 public static final int CONSTANT_LONG = 5;
074 public static final int CONSTANT_DOUBLE = 6;
075 public static final int CONSTANT_CLASS = 7;
076 public static final int CONSTANT_STRING = 8;
077 public static final int CONSTANT_FIELD = 9;
078 public static final int CONSTANT_METHOD = 10;
079 public static final int CONSTANT_INTERFACEMETHOD = 11;
080 public static final int CONSTANT_NAMEANDTYPE = 12;
081
082 /* Access Flags */
083 public static final int ACC_PUBLIC = 0x00000001;
084 public static final int ACC_PRIVATE = 0x00000002;
085 public static final int ACC_PROTECTED = 0x00000004;
086 public static final int ACC_STATIC = 0x00000008;
087 public static final int ACC_FINAL = 0x00000010;
088 public static final int ACC_SYNCHRONIZED = 0x00000020;
089 public static final int ACC_SUPER = 0x00000020;
090 public static final int ACC_VOLATILE = 0x00000040;
091 public static final int ACC_TRANSIENT = 0x00000080;
092 public static final int ACC_NATIVE = 0x00000100;
093 public static final int ACC_INTERFACE = 0x00000200;
094 public static final int ACC_ABSTRACT = 0x00000400;
095 public static final int ACC_STRICT = 0x00000800;
096 public static final int ACC_EXPLICIT = 0x00001000;
097 public static final int ACC_SYNTHETIC = 0x00010000; // actually, this is an attribute
098
099 /* Type codes */
100 public static final int T_CLASS = 0x00000002;
101 public static final int T_BOOLEAN = 0x00000004;
102 public static final int T_CHAR = 0x00000005;
103 public static final int T_FLOAT = 0x00000006;
104 public static final int T_DOUBLE = 0x00000007;
105 public static final int T_BYTE = 0x00000008;
106 public static final int T_SHORT = 0x00000009;
107 public static final int T_INT = 0x0000000a;
108 public static final int T_LONG = 0x0000000b;
109
110 /* Type codes for StackMap attribute */
111 public static final int ITEM_Bogus =0; // an unknown or uninitialized value
112 public static final int ITEM_Integer =1; // a 32-bit integer
113 public static final int ITEM_Float =2; // not used
114 public static final int ITEM_Double =3; // not used
115 public static final int ITEM_Long =4; // a 64-bit integer
116 public static final int ITEM_Null =5; // the type of null
117 public static final int ITEM_InitObject =6; // "this" in constructor
118 public static final int ITEM_Object =7; // followed by 2-byte index of class name
119 public static final int ITEM_NewObject =8; // followed by 2-byte ref to "new"
120
121 /* Constants used in StackMapTable attribute */
122 public static final int SAME_FRAME_BOUND = 64;
123 public static final int SAME_LOCALS_1_STACK_ITEM_BOUND = 128;
124 public static final int SAME_LOCALS_1_STACK_ITEM_EXTENDED = 247;
125 public static final int SAME_FRAME_EXTENDED = 251;
126 public static final int FULL_FRAME = 255;
127
128 /* Opcodes */
129 public static final int opc_dead = -2;
130 public static final int opc_label = -1;
131 public static final int opc_nop = 0;
132 public static final int opc_aconst_null = 1;
133 public static final int opc_iconst_m1 = 2;
134 public static final int opc_iconst_0 = 3;
135 public static final int opc_iconst_1 = 4;
136 public static final int opc_iconst_2 = 5;
137 public static final int opc_iconst_3 = 6;
138 public static final int opc_iconst_4 = 7;
139 public static final int opc_iconst_5 = 8;
140 public static final int opc_lconst_0 = 9;
141 public static final int opc_lconst_1 = 10;
142 public static final int opc_fconst_0 = 11;
143 public static final int opc_fconst_1 = 12;
144 public static final int opc_fconst_2 = 13;
145 public static final int opc_dconst_0 = 14;
146 public static final int opc_dconst_1 = 15;
147 public static final int opc_bipush = 16;
148 public static final int opc_sipush = 17;
149 public static final int opc_ldc = 18;
150 public static final int opc_ldc_w = 19;
151 public static final int opc_ldc2_w = 20;
152 public static final int opc_iload = 21;
153 public static final int opc_lload = 22;
154 public static final int opc_fload = 23;
155 public static final int opc_dload = 24;
156 public static final int opc_aload = 25;
157 public static final int opc_iload_0 = 26;
158 public static final int opc_iload_1 = 27;
159 public static final int opc_iload_2 = 28;
160 public static final int opc_iload_3 = 29;
161 public static final int opc_lload_0 = 30;
162 public static final int opc_lload_1 = 31;
163 public static final int opc_lload_2 = 32;
164 public static final int opc_lload_3 = 33;
165 public static final int opc_fload_0 = 34;
166 public static final int opc_fload_1 = 35;
167 public static final int opc_fload_2 = 36;
168 public static final int opc_fload_3 = 37;
169 public static final int opc_dload_0 = 38;
170 public static final int opc_dload_1 = 39;
171 public static final int opc_dload_2 = 40;
172 public static final int opc_dload_3 = 41;
173 public static final int opc_aload_0 = 42;
174 public static final int opc_aload_1 = 43;
175 public static final int opc_aload_2 = 44;
176 public static final int opc_aload_3 = 45;
177 public static final int opc_iaload = 46;
178 public static final int opc_laload = 47;
179 public static final int opc_faload = 48;
180 public static final int opc_daload = 49;
181 public static final int opc_aaload = 50;
182 public static final int opc_baload = 51;
183 public static final int opc_caload = 52;
184 public static final int opc_saload = 53;
185 public static final int opc_istore = 54;
186 public static final int opc_lstore = 55;
187 public static final int opc_fstore = 56;
188 public static final int opc_dstore = 57;
189 public static final int opc_astore = 58;
190 public static final int opc_istore_0 = 59;
191 public static final int opc_istore_1 = 60;
192 public static final int opc_istore_2 = 61;
193 public static final int opc_istore_3 = 62;
194 public static final int opc_lstore_0 = 63;
195 public static final int opc_lstore_1 = 64;
196 public static final int opc_lstore_2 = 65;
197 public static final int opc_lstore_3 = 66;
198 public static final int opc_fstore_0 = 67;
199 public static final int opc_fstore_1 = 68;
200 public static final int opc_fstore_2 = 69;
201 public static final int opc_fstore_3 = 70;
202 public static final int opc_dstore_0 = 71;
203 public static final int opc_dstore_1 = 72;
204 public static final int opc_dstore_2 = 73;
205 public static final int opc_dstore_3 = 74;
206 public static final int opc_astore_0 = 75;
207 public static final int opc_astore_1 = 76;
208 public static final int opc_astore_2 = 77;
209 public static final int opc_astore_3 = 78;
210 public static final int opc_iastore = 79;
211 public static final int opc_lastore = 80;
212 public static final int opc_fastore = 81;
213 public static final int opc_dastore = 82;
214 public static final int opc_aastore = 83;
215 public static final int opc_bastore = 84;
216 public static final int opc_castore = 85;
217 public static final int opc_sastore = 86;
218 public static final int opc_pop = 87;
219 public static final int opc_pop2 = 88;
220 public static final int opc_dup = 89;
221 public static final int opc_dup_x1 = 90;
222 public static final int opc_dup_x2 = 91;
223 public static final int opc_dup2 = 92;
224 public static final int opc_dup2_x1 = 93;
225 public static final int opc_dup2_x2 = 94;
226 public static final int opc_swap = 95;
227 public static final int opc_iadd = 96;
228 public static final int opc_ladd = 97;
229 public static final int opc_fadd = 98;
230 public static final int opc_dadd = 99;
231 public static final int opc_isub = 100;
232 public static final int opc_lsub = 101;
233 public static final int opc_fsub = 102;
234 public static final int opc_dsub = 103;
235 public static final int opc_imul = 104;
236 public static final int opc_lmul = 105;
237 public static final int opc_fmul = 106;
238 public static final int opc_dmul = 107;
239 public static final int opc_idiv = 108;
240 public static final int opc_ldiv = 109;
241 public static final int opc_fdiv = 110;
242 public static final int opc_ddiv = 111;
243 public static final int opc_irem = 112;
244 public static final int opc_lrem = 113;
245 public static final int opc_frem = 114;
246 public static final int opc_drem = 115;
247 public static final int opc_ineg = 116;
248 public static final int opc_lneg = 117;
249 public static final int opc_fneg = 118;
250 public static final int opc_dneg = 119;
251 public static final int opc_ishl = 120;
252 public static final int opc_lshl = 121;
253 public static final int opc_ishr = 122;
254 public static final int opc_lshr = 123;
255 public static final int opc_iushr = 124;
256 public static final int opc_lushr = 125;
257 public static final int opc_iand = 126;
258 public static final int opc_land = 127;
259 public static final int opc_ior = 128;
260 public static final int opc_lor = 129;
261 public static final int opc_ixor = 130;
262 public static final int opc_lxor = 131;
263 public static final int opc_iinc = 132;
264 public static final int opc_i2l = 133;
265 public static final int opc_i2f = 134;
266 public static final int opc_i2d = 135;
267 public static final int opc_l2i = 136;
268 public static final int opc_l2f = 137;
269 public static final int opc_l2d = 138;
270 public static final int opc_f2i = 139;
271 public static final int opc_f2l = 140;
272 public static final int opc_f2d = 141;
273 public static final int opc_d2i = 142;
274 public static final int opc_d2l = 143;
275 public static final int opc_d2f = 144;
276 public static final int opc_i2b = 145;
277 public static final int opc_int2byte = 145;
278 public static final int opc_i2c = 146;
279 public static final int opc_int2char = 146;
280 public static final int opc_i2s = 147;
281 public static final int opc_int2short = 147;
282 public static final int opc_lcmp = 148;
283 public static final int opc_fcmpl = 149;
284 public static final int opc_fcmpg = 150;
285 public static final int opc_dcmpl = 151;
286 public static final int opc_dcmpg = 152;
287 public static final int opc_ifeq = 153;
288 public static final int opc_ifne = 154;
289 public static final int opc_iflt = 155;
290 public static final int opc_ifge = 156;
291 public static final int opc_ifgt = 157;
292 public static final int opc_ifle = 158;
293 public static final int opc_if_icmpeq = 159;
294 public static final int opc_if_icmpne = 160;
295 public static final int opc_if_icmplt = 161;
296 public static final int opc_if_icmpge = 162;
297 public static final int opc_if_icmpgt = 163;
298 public static final int opc_if_icmple = 164;
299 public static final int opc_if_acmpeq = 165;
300 public static final int opc_if_acmpne = 166;
301 public static final int opc_goto = 167;
302 public static final int opc_jsr = 168;
303 public static final int opc_ret = 169;
304 public static final int opc_tableswitch = 170;
305 public static final int opc_lookupswitch = 171;
306 public static final int opc_ireturn = 172;
307 public static final int opc_lreturn = 173;
308 public static final int opc_freturn = 174;
309 public static final int opc_dreturn = 175;
310 public static final int opc_areturn = 176;
311 public static final int opc_return = 177;
312 public static final int opc_getstatic = 178;
313 public static final int opc_putstatic = 179;
314 public static final int opc_getfield = 180;
315 public static final int opc_putfield = 181;
316 public static final int opc_invokevirtual = 182;
317 public static final int opc_invokenonvirtual = 183;
318 public static final int opc_invokespecial = 183;
319 public static final int opc_invokestatic = 184;
320 public static final int opc_invokeinterface = 185;
321 // public static final int opc_xxxunusedxxx = 186;
322 public static final int opc_new = 187;
323 public static final int opc_newarray = 188;
324 public static final int opc_anewarray = 189;
325 public static final int opc_arraylength = 190;
326 public static final int opc_athrow = 191;
327 public static final int opc_checkcast = 192;
328 public static final int opc_instanceof = 193;
329 public static final int opc_monitorenter = 194;
330 public static final int opc_monitorexit = 195;
331 public static final int opc_wide = 196;
332 public static final int opc_multianewarray = 197;
333 public static final int opc_ifnull = 198;
334 public static final int opc_ifnonnull = 199;
335 public static final int opc_goto_w = 200;
336 public static final int opc_jsr_w = 201;
337 /* Pseudo-instructions */
338 public static final int opc_bytecode = 203;
339 public static final int opc_try = 204;
340 public static final int opc_endtry = 205;
341 public static final int opc_catch = 206;
342 public static final int opc_var = 207;
343 public static final int opc_endvar = 208;
344 public static final int opc_localsmap = 209;
345 public static final int opc_stackmap = 210;
346 /* PicoJava prefixes */
347 public static final int opc_nonpriv = 254;
348 public static final int opc_priv = 255;
349
350 /* Wide instructions */
351 public static final int opc_iload_w = (opc_wide<<8)|opc_iload;
352 public static final int opc_lload_w = (opc_wide<<8)|opc_lload;
353 public static final int opc_fload_w = (opc_wide<<8)|opc_fload;
354 public static final int opc_dload_w = (opc_wide<<8)|opc_dload;
355 public static final int opc_aload_w = (opc_wide<<8)|opc_aload;
356 public static final int opc_istore_w = (opc_wide<<8)|opc_istore;
357 public static final int opc_lstore_w = (opc_wide<<8)|opc_lstore;
358 public static final int opc_fstore_w = (opc_wide<<8)|opc_fstore;
359 public static final int opc_dstore_w = (opc_wide<<8)|opc_dstore;
360 public static final int opc_astore_w = (opc_wide<<8)|opc_astore;
361 public static final int opc_ret_w = (opc_wide<<8)|opc_ret;
362 public static final int opc_iinc_w = (opc_wide<<8)|opc_iinc;
363
364 /* Opcode Names */
365 public static final String opcNamesTab[] = {
366 "nop",
367 "aconst_null",
368 "iconst_m1",
369 "iconst_0",
370 "iconst_1",
371 "iconst_2",
372 "iconst_3",
373 "iconst_4",
374 "iconst_5",
375 "lconst_0",
376 "lconst_1",
377 "fconst_0",
378 "fconst_1",
379 "fconst_2",
380 "dconst_0",
381 "dconst_1",
382 "bipush",
383 "sipush",
384 "ldc",
385 "ldc_w",
386 "ldc2_w",
387 "iload",
388 "lload",
389 "fload",
390 "dload",
391 "aload",
392 "iload_0",
393 "iload_1",
394 "iload_2",
395 "iload_3",
396 "lload_0",
397 "lload_1",
398 "lload_2",
399 "lload_3",
400 "fload_0",
401 "fload_1",
402 "fload_2",
403 "fload_3",
404 "dload_0",
405 "dload_1",
406 "dload_2",
407 "dload_3",
408 "aload_0",
409 "aload_1",
410 "aload_2",
411 "aload_3",
412 "iaload",
413 "laload",
414 "faload",
415 "daload",
416 "aaload",
417 "baload",
418 "caload",
419 "saload",
420 "istore",
421 "lstore",
422 "fstore",
423 "dstore",
424 "astore",
425 "istore_0",
426 "istore_1",
427 "istore_2",
428 "istore_3",
429 "lstore_0",
430 "lstore_1",
431 "lstore_2",
432 "lstore_3",
433 "fstore_0",
434 "fstore_1",
435 "fstore_2",
436 "fstore_3",
437 "dstore_0",
438 "dstore_1",
439 "dstore_2",
440 "dstore_3",
441 "astore_0",
442 "astore_1",
443 "astore_2",
444 "astore_3",
445 "iastore",
446 "lastore",
447 "fastore",
448 "dastore",
449 "aastore",
450 "bastore",
451 "castore",
452 "sastore",
453 "pop",
454 "pop2",
455 "dup",
456 "dup_x1",
457 "dup_x2",
458 "dup2",
459 "dup2_x1",
460 "dup2_x2",
461 "swap",
462 "iadd",
463 "ladd",
464 "fadd",
465 "dadd",
466 "isub",
467 "lsub",
468 "fsub",
469 "dsub",
470 "imul",
471 "lmul",
472 "fmul",
473 "dmul",
474 "idiv",
475 "ldiv",
476 "fdiv",
477 "ddiv",
478 "irem",
479 "lrem",
480 "frem",
481 "drem",
482 "ineg",
483 "lneg",
484 "fneg",
485 "dneg",
486 "ishl",
487 "lshl",
488 "ishr",
489 "lshr",
490 "iushr",
491 "lushr",
492 "iand",
493 "land",
494 "ior",
495 "lor",
496 "ixor",
497 "lxor",
498 "iinc",
499 "i2l",
500 "i2f",
501 "i2d",
502 "l2i",
503 "l2f",
504 "l2d",
505 "f2i",
506 "f2l",
507 "f2d",
508 "d2i",
509 "d2l",
510 "d2f",
511 "i2b",
512 "i2c",
513 "i2s",
514 "lcmp",
515 "fcmpl",
516 "fcmpg",
517 "dcmpl",
518 "dcmpg",
519 "ifeq",
520 "ifne",
521 "iflt",
522 "ifge",
523 "ifgt",
524 "ifle",
525 "if_icmpeq",
526 "if_icmpne",
527 "if_icmplt",
528 "if_icmpge",
529 "if_icmpgt",
530 "if_icmple",
531 "if_acmpeq",
532 "if_acmpne",
533 "goto",
534 "jsr",
535 "ret",
536 "tableswitch",
537 "lookupswitch",
538 "ireturn",
539 "lreturn",
540 "freturn",
541 "dreturn",
542 "areturn",
543 "return",
544 "getstatic",
545 "putstatic",
546 "getfield",
547 "putfield",
548 "invokevirtual",
549 "invokespecial", // was "invokenonvirtual",
550 "invokestatic",
551 "invokeinterface",
552 "bytecode 186", //"xxxunusedxxx",
553 "new",
554 "newarray",
555 "anewarray",
556 "arraylength",
557 "athrow",
558 "checkcast",
559 "instanceof",
560 "monitorenter",
561 "monitorexit",
562 null, // "wide",
563 "multianewarray",
564 "ifnull",
565 "ifnonnull",
566 "goto_w",
567 "jsr_w",
568 "bytecode 202", // "breakpoint",
569 "bytecode",
570 "try",
571 "endtry",
572 "catch",
573 "var",
574 "endvar",
575 "locals_map",
576 "stack_map"
577 };
578
579 /* Opcode Lengths */
580 public static final int opcLengthsTab[] = {
581 1,
582 1,
583 1,
584 1,
585 1,
586 1,
587 1,
588 1,
589 1,
590 1,
591 1,
592 1,
593 1,
594 1,
595 1,
596 1,
597 2,
598 3,
599 2,
600 3,
601 3,
602 2,
603 2,
604 2,
605 2,
606 2,
607 1,
608 1,
609 1,
610 1,
611 1,
612 1,
613 1,
614 1,
615 1,
616 1,
617 1,
618 1,
619 1,
620 1,
621 1,
622 1,
623 1,
624 1,
625 1,
626 1,
627 1,
628 1,
629 1,
630 1,
631 1,
632 1,
633 1,
634 1,
635 2,
636 2,
637 2,
638 2,
639 2,
640 1,
641 1,
642 1,
643 1,
644 1,
645 1,
646 1,
647 1,
648 1,
649 1,
650 1,
651 1,
652 1,
653 1,
654 1,
655 1,
656 1,
657 1,
658 1,
659 1,
660 1,
661 1,
662 1,
663 1,
664 1,
665 1,
666 1,
667 1,
668 1,
669 1,
670 1,
671 1,
672 1,
673 1,
674 1,
675 1,
676 1,
677 1,
678 1,
679 1,
680 1,
681 1,
682 1,
683 1,
684 1,
685 1,
686 1,
687 1,
688 1,
689 1,
690 1,
691 1,
692 1,
693 1,
694 1,
695 1,
696 1,
697 1,
698 1,
699 1,
700 1,
701 1,
702 1,
703 1,
704 1,
705 1,
706 1,
707 1,
708 1,
709 1,
710 1,
711 1,
712 1,
713 3,
714 1,
715 1,
716 1,
717 1,
718 1,
719 1,
720 1,
721 1,
722 1,
723 1,
724 1,
725 1,
726 1,
727 1,
728 1,
729 1,
730 1,
731 1,
732 1,
733 1,
734 3,
735 3,
736 3,
737 3,
738 3,
739 3,
740 3,
741 3,
742 3,
743 3,
744 3,
745 3,
746 3,
747 3,
748 3,
749 3,
750 2,
751 99,
752 99,
753 1,
754 1,
755 1,
756 1,
757 1,
758 1,
759 3,
760 3,
761 3,
762 3,
763 3,
764 3,
765 3,
766 5,
767 0,
768 3,
769 2,
770 3,
771 1,
772 1,
773 3,
774 3,
775 1,
776 1,
777 0, // wide
778 4,
779 3,
780 3,
781 5,
782 5,
783 1,
784 1, 0, 0, 0, 0, 0 // pseudo
785 };
786
787 }