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: package sun.tools.javap;
027:
028: public interface RuntimeConstants {
029:
030: /* Signature Characters */
031: public static final char SIGC_VOID = 'V';
032: public static final String SIG_VOID = "V";
033: public static final char SIGC_BOOLEAN = 'Z';
034: public static final String SIG_BOOLEAN = "Z";
035: public static final char SIGC_BYTE = 'B';
036: public static final String SIG_BYTE = "B";
037: public static final char SIGC_CHAR = 'C';
038: public static final String SIG_CHAR = "C";
039: public static final char SIGC_SHORT = 'S';
040: public static final String SIG_SHORT = "S";
041: public static final char SIGC_INT = 'I';
042: public static final String SIG_INT = "I";
043: public static final char SIGC_LONG = 'J';
044: public static final String SIG_LONG = "J";
045: public static final char SIGC_FLOAT = 'F';
046: public static final String SIG_FLOAT = "F";
047: public static final char SIGC_DOUBLE = 'D';
048: public static final String SIG_DOUBLE = "D";
049: public static final char SIGC_ARRAY = '[';
050: public static final String SIG_ARRAY = "[";
051: public static final char SIGC_CLASS = 'L';
052: public static final String SIG_CLASS = "L";
053: public static final char SIGC_METHOD = '(';
054: public static final String SIG_METHOD = "(";
055: public static final char SIGC_ENDCLASS = ';';
056: public static final String SIG_ENDCLASS = ";";
057: public static final char SIGC_ENDMETHOD = ')';
058: public static final String SIG_ENDMETHOD = ")";
059: public static final char SIGC_PACKAGE = '/';
060: public static final String SIG_PACKAGE = "/";
061:
062: /* Class File Constants */
063: public static final int JAVA_MAGIC = 0xcafebabe;
064: public static final int JAVA_VERSION = 45;
065: public static final int JAVA_MINOR_VERSION = 3;
066:
067: /* Constant table */
068: public static final int CONSTANT_UTF8 = 1;
069: public static final int CONSTANT_UNICODE = 2;
070: public static final int CONSTANT_INTEGER = 3;
071: public static final int CONSTANT_FLOAT = 4;
072: public static final int CONSTANT_LONG = 5;
073: public static final int CONSTANT_DOUBLE = 6;
074: public static final int CONSTANT_CLASS = 7;
075: public static final int CONSTANT_STRING = 8;
076: public static final int CONSTANT_FIELD = 9;
077: public static final int CONSTANT_METHOD = 10;
078: public static final int CONSTANT_INTERFACEMETHOD = 11;
079: public static final int CONSTANT_NAMEANDTYPE = 12;
080:
081: /* Access Flags */
082: public static final int ACC_PUBLIC = 0x00000001;
083: public static final int ACC_PRIVATE = 0x00000002;
084: public static final int ACC_PROTECTED = 0x00000004;
085: public static final int ACC_STATIC = 0x00000008;
086: public static final int ACC_FINAL = 0x00000010;
087: public static final int ACC_SYNCHRONIZED = 0x00000020;
088: public static final int ACC_SUPER = 0x00000020;
089: public static final int ACC_VOLATILE = 0x00000040;
090: public static final int ACC_TRANSIENT = 0x00000080;
091: public static final int ACC_NATIVE = 0x00000100;
092: public static final int ACC_INTERFACE = 0x00000200;
093: public static final int ACC_ABSTRACT = 0x00000400;
094: public static final int ACC_STRICT = 0x00000800;
095: public static final int ACC_EXPLICIT = 0x00001000;
096: public static final int ACC_SYNTHETIC = 0x00010000; // actually, this is an attribute
097:
098: /* Type codes */
099: public static final int T_CLASS = 0x00000002;
100: public static final int T_BOOLEAN = 0x00000004;
101: public static final int T_CHAR = 0x00000005;
102: public static final int T_FLOAT = 0x00000006;
103: public static final int T_DOUBLE = 0x00000007;
104: public static final int T_BYTE = 0x00000008;
105: public static final int T_SHORT = 0x00000009;
106: public static final int T_INT = 0x0000000a;
107: public static final int T_LONG = 0x0000000b;
108:
109: /* Type codes for StackMap attribute */
110: public static final int ITEM_Bogus = 0; // an unknown or uninitialized value
111: public static final int ITEM_Integer = 1; // a 32-bit integer
112: public static final int ITEM_Float = 2; // not used
113: public static final int ITEM_Double = 3; // not used
114: public static final int ITEM_Long = 4; // a 64-bit integer
115: public static final int ITEM_Null = 5; // the type of null
116: public static final int ITEM_InitObject = 6; // "this" in constructor
117: public static final int ITEM_Object = 7; // followed by 2-byte index of class name
118: public static final int ITEM_NewObject = 8; // followed by 2-byte ref to "new"
119:
120: /* Constants used in StackMapTable attribute */
121: public static final int SAME_FRAME_BOUND = 64;
122: public static final int SAME_LOCALS_1_STACK_ITEM_BOUND = 128;
123: public static final int SAME_LOCALS_1_STACK_ITEM_EXTENDED = 247;
124: public static final int SAME_FRAME_EXTENDED = 251;
125: public static final int FULL_FRAME = 255;
126:
127: /* Opcodes */
128: public static final int opc_dead = -2;
129: public static final int opc_label = -1;
130: public static final int opc_nop = 0;
131: public static final int opc_aconst_null = 1;
132: public static final int opc_iconst_m1 = 2;
133: public static final int opc_iconst_0 = 3;
134: public static final int opc_iconst_1 = 4;
135: public static final int opc_iconst_2 = 5;
136: public static final int opc_iconst_3 = 6;
137: public static final int opc_iconst_4 = 7;
138: public static final int opc_iconst_5 = 8;
139: public static final int opc_lconst_0 = 9;
140: public static final int opc_lconst_1 = 10;
141: public static final int opc_fconst_0 = 11;
142: public static final int opc_fconst_1 = 12;
143: public static final int opc_fconst_2 = 13;
144: public static final int opc_dconst_0 = 14;
145: public static final int opc_dconst_1 = 15;
146: public static final int opc_bipush = 16;
147: public static final int opc_sipush = 17;
148: public static final int opc_ldc = 18;
149: public static final int opc_ldc_w = 19;
150: public static final int opc_ldc2_w = 20;
151: public static final int opc_iload = 21;
152: public static final int opc_lload = 22;
153: public static final int opc_fload = 23;
154: public static final int opc_dload = 24;
155: public static final int opc_aload = 25;
156: public static final int opc_iload_0 = 26;
157: public static final int opc_iload_1 = 27;
158: public static final int opc_iload_2 = 28;
159: public static final int opc_iload_3 = 29;
160: public static final int opc_lload_0 = 30;
161: public static final int opc_lload_1 = 31;
162: public static final int opc_lload_2 = 32;
163: public static final int opc_lload_3 = 33;
164: public static final int opc_fload_0 = 34;
165: public static final int opc_fload_1 = 35;
166: public static final int opc_fload_2 = 36;
167: public static final int opc_fload_3 = 37;
168: public static final int opc_dload_0 = 38;
169: public static final int opc_dload_1 = 39;
170: public static final int opc_dload_2 = 40;
171: public static final int opc_dload_3 = 41;
172: public static final int opc_aload_0 = 42;
173: public static final int opc_aload_1 = 43;
174: public static final int opc_aload_2 = 44;
175: public static final int opc_aload_3 = 45;
176: public static final int opc_iaload = 46;
177: public static final int opc_laload = 47;
178: public static final int opc_faload = 48;
179: public static final int opc_daload = 49;
180: public static final int opc_aaload = 50;
181: public static final int opc_baload = 51;
182: public static final int opc_caload = 52;
183: public static final int opc_saload = 53;
184: public static final int opc_istore = 54;
185: public static final int opc_lstore = 55;
186: public static final int opc_fstore = 56;
187: public static final int opc_dstore = 57;
188: public static final int opc_astore = 58;
189: public static final int opc_istore_0 = 59;
190: public static final int opc_istore_1 = 60;
191: public static final int opc_istore_2 = 61;
192: public static final int opc_istore_3 = 62;
193: public static final int opc_lstore_0 = 63;
194: public static final int opc_lstore_1 = 64;
195: public static final int opc_lstore_2 = 65;
196: public static final int opc_lstore_3 = 66;
197: public static final int opc_fstore_0 = 67;
198: public static final int opc_fstore_1 = 68;
199: public static final int opc_fstore_2 = 69;
200: public static final int opc_fstore_3 = 70;
201: public static final int opc_dstore_0 = 71;
202: public static final int opc_dstore_1 = 72;
203: public static final int opc_dstore_2 = 73;
204: public static final int opc_dstore_3 = 74;
205: public static final int opc_astore_0 = 75;
206: public static final int opc_astore_1 = 76;
207: public static final int opc_astore_2 = 77;
208: public static final int opc_astore_3 = 78;
209: public static final int opc_iastore = 79;
210: public static final int opc_lastore = 80;
211: public static final int opc_fastore = 81;
212: public static final int opc_dastore = 82;
213: public static final int opc_aastore = 83;
214: public static final int opc_bastore = 84;
215: public static final int opc_castore = 85;
216: public static final int opc_sastore = 86;
217: public static final int opc_pop = 87;
218: public static final int opc_pop2 = 88;
219: public static final int opc_dup = 89;
220: public static final int opc_dup_x1 = 90;
221: public static final int opc_dup_x2 = 91;
222: public static final int opc_dup2 = 92;
223: public static final int opc_dup2_x1 = 93;
224: public static final int opc_dup2_x2 = 94;
225: public static final int opc_swap = 95;
226: public static final int opc_iadd = 96;
227: public static final int opc_ladd = 97;
228: public static final int opc_fadd = 98;
229: public static final int opc_dadd = 99;
230: public static final int opc_isub = 100;
231: public static final int opc_lsub = 101;
232: public static final int opc_fsub = 102;
233: public static final int opc_dsub = 103;
234: public static final int opc_imul = 104;
235: public static final int opc_lmul = 105;
236: public static final int opc_fmul = 106;
237: public static final int opc_dmul = 107;
238: public static final int opc_idiv = 108;
239: public static final int opc_ldiv = 109;
240: public static final int opc_fdiv = 110;
241: public static final int opc_ddiv = 111;
242: public static final int opc_irem = 112;
243: public static final int opc_lrem = 113;
244: public static final int opc_frem = 114;
245: public static final int opc_drem = 115;
246: public static final int opc_ineg = 116;
247: public static final int opc_lneg = 117;
248: public static final int opc_fneg = 118;
249: public static final int opc_dneg = 119;
250: public static final int opc_ishl = 120;
251: public static final int opc_lshl = 121;
252: public static final int opc_ishr = 122;
253: public static final int opc_lshr = 123;
254: public static final int opc_iushr = 124;
255: public static final int opc_lushr = 125;
256: public static final int opc_iand = 126;
257: public static final int opc_land = 127;
258: public static final int opc_ior = 128;
259: public static final int opc_lor = 129;
260: public static final int opc_ixor = 130;
261: public static final int opc_lxor = 131;
262: public static final int opc_iinc = 132;
263: public static final int opc_i2l = 133;
264: public static final int opc_i2f = 134;
265: public static final int opc_i2d = 135;
266: public static final int opc_l2i = 136;
267: public static final int opc_l2f = 137;
268: public static final int opc_l2d = 138;
269: public static final int opc_f2i = 139;
270: public static final int opc_f2l = 140;
271: public static final int opc_f2d = 141;
272: public static final int opc_d2i = 142;
273: public static final int opc_d2l = 143;
274: public static final int opc_d2f = 144;
275: public static final int opc_i2b = 145;
276: public static final int opc_int2byte = 145;
277: public static final int opc_i2c = 146;
278: public static final int opc_int2char = 146;
279: public static final int opc_i2s = 147;
280: public static final int opc_int2short = 147;
281: public static final int opc_lcmp = 148;
282: public static final int opc_fcmpl = 149;
283: public static final int opc_fcmpg = 150;
284: public static final int opc_dcmpl = 151;
285: public static final int opc_dcmpg = 152;
286: public static final int opc_ifeq = 153;
287: public static final int opc_ifne = 154;
288: public static final int opc_iflt = 155;
289: public static final int opc_ifge = 156;
290: public static final int opc_ifgt = 157;
291: public static final int opc_ifle = 158;
292: public static final int opc_if_icmpeq = 159;
293: public static final int opc_if_icmpne = 160;
294: public static final int opc_if_icmplt = 161;
295: public static final int opc_if_icmpge = 162;
296: public static final int opc_if_icmpgt = 163;
297: public static final int opc_if_icmple = 164;
298: public static final int opc_if_acmpeq = 165;
299: public static final int opc_if_acmpne = 166;
300: public static final int opc_goto = 167;
301: public static final int opc_jsr = 168;
302: public static final int opc_ret = 169;
303: public static final int opc_tableswitch = 170;
304: public static final int opc_lookupswitch = 171;
305: public static final int opc_ireturn = 172;
306: public static final int opc_lreturn = 173;
307: public static final int opc_freturn = 174;
308: public static final int opc_dreturn = 175;
309: public static final int opc_areturn = 176;
310: public static final int opc_return = 177;
311: public static final int opc_getstatic = 178;
312: public static final int opc_putstatic = 179;
313: public static final int opc_getfield = 180;
314: public static final int opc_putfield = 181;
315: public static final int opc_invokevirtual = 182;
316: public static final int opc_invokenonvirtual = 183;
317: public static final int opc_invokespecial = 183;
318: public static final int opc_invokestatic = 184;
319: public static final int opc_invokeinterface = 185;
320: // public static final int opc_xxxunusedxxx = 186;
321: public static final int opc_new = 187;
322: public static final int opc_newarray = 188;
323: public static final int opc_anewarray = 189;
324: public static final int opc_arraylength = 190;
325: public static final int opc_athrow = 191;
326: public static final int opc_checkcast = 192;
327: public static final int opc_instanceof = 193;
328: public static final int opc_monitorenter = 194;
329: public static final int opc_monitorexit = 195;
330: public static final int opc_wide = 196;
331: public static final int opc_multianewarray = 197;
332: public static final int opc_ifnull = 198;
333: public static final int opc_ifnonnull = 199;
334: public static final int opc_goto_w = 200;
335: public static final int opc_jsr_w = 201;
336: /* Pseudo-instructions */
337: public static final int opc_bytecode = 203;
338: public static final int opc_try = 204;
339: public static final int opc_endtry = 205;
340: public static final int opc_catch = 206;
341: public static final int opc_var = 207;
342: public static final int opc_endvar = 208;
343: public static final int opc_localsmap = 209;
344: public static final int opc_stackmap = 210;
345: /* PicoJava prefixes */
346: public static final int opc_nonpriv = 254;
347: public static final int opc_priv = 255;
348:
349: /* Wide instructions */
350: public static final int opc_iload_w = (opc_wide << 8) | opc_iload;
351: public static final int opc_lload_w = (opc_wide << 8) | opc_lload;
352: public static final int opc_fload_w = (opc_wide << 8) | opc_fload;
353: public static final int opc_dload_w = (opc_wide << 8) | opc_dload;
354: public static final int opc_aload_w = (opc_wide << 8) | opc_aload;
355: public static final int opc_istore_w = (opc_wide << 8) | opc_istore;
356: public static final int opc_lstore_w = (opc_wide << 8) | opc_lstore;
357: public static final int opc_fstore_w = (opc_wide << 8) | opc_fstore;
358: public static final int opc_dstore_w = (opc_wide << 8) | opc_dstore;
359: public static final int opc_astore_w = (opc_wide << 8) | opc_astore;
360: public static final int opc_ret_w = (opc_wide << 8) | opc_ret;
361: public static final int opc_iinc_w = (opc_wide << 8) | opc_iinc;
362:
363: /* Opcode Names */
364: public static final String opcNamesTab[] = { "nop", "aconst_null",
365: "iconst_m1", "iconst_0", "iconst_1", "iconst_2",
366: "iconst_3", "iconst_4", "iconst_5", "lconst_0", "lconst_1",
367: "fconst_0", "fconst_1", "fconst_2", "dconst_0", "dconst_1",
368: "bipush", "sipush", "ldc", "ldc_w", "ldc2_w", "iload",
369: "lload", "fload", "dload", "aload", "iload_0", "iload_1",
370: "iload_2", "iload_3", "lload_0", "lload_1", "lload_2",
371: "lload_3", "fload_0", "fload_1", "fload_2", "fload_3",
372: "dload_0", "dload_1", "dload_2", "dload_3", "aload_0",
373: "aload_1", "aload_2", "aload_3", "iaload", "laload",
374: "faload", "daload", "aaload", "baload", "caload", "saload",
375: "istore", "lstore", "fstore", "dstore", "astore",
376: "istore_0", "istore_1", "istore_2", "istore_3", "lstore_0",
377: "lstore_1", "lstore_2", "lstore_3", "fstore_0", "fstore_1",
378: "fstore_2", "fstore_3", "dstore_0", "dstore_1", "dstore_2",
379: "dstore_3", "astore_0", "astore_1", "astore_2", "astore_3",
380: "iastore", "lastore", "fastore", "dastore", "aastore",
381: "bastore", "castore", "sastore", "pop", "pop2", "dup",
382: "dup_x1", "dup_x2", "dup2", "dup2_x1", "dup2_x2", "swap",
383: "iadd", "ladd", "fadd", "dadd", "isub", "lsub", "fsub",
384: "dsub", "imul", "lmul", "fmul", "dmul", "idiv", "ldiv",
385: "fdiv", "ddiv", "irem", "lrem", "frem", "drem", "ineg",
386: "lneg", "fneg", "dneg", "ishl", "lshl", "ishr", "lshr",
387: "iushr", "lushr", "iand", "land", "ior", "lor", "ixor",
388: "lxor", "iinc", "i2l", "i2f", "i2d", "l2i", "l2f", "l2d",
389: "f2i", "f2l", "f2d", "d2i", "d2l", "d2f", "i2b", "i2c",
390: "i2s", "lcmp", "fcmpl", "fcmpg", "dcmpl", "dcmpg", "ifeq",
391: "ifne", "iflt", "ifge", "ifgt", "ifle", "if_icmpeq",
392: "if_icmpne", "if_icmplt", "if_icmpge", "if_icmpgt",
393: "if_icmple", "if_acmpeq", "if_acmpne", "goto", "jsr",
394: "ret", "tableswitch", "lookupswitch", "ireturn", "lreturn",
395: "freturn", "dreturn", "areturn",
396: "return",
397: "getstatic",
398: "putstatic",
399: "getfield",
400: "putfield",
401: "invokevirtual",
402: "invokespecial", // was "invokenonvirtual",
403: "invokestatic",
404: "invokeinterface",
405: "bytecode 186", //"xxxunusedxxx",
406: "new", "newarray", "anewarray", "arraylength", "athrow",
407: "checkcast", "instanceof",
408: "monitorenter",
409: "monitorexit",
410: null, // "wide",
411: "multianewarray", "ifnull", "ifnonnull", "goto_w",
412: "jsr_w",
413: "bytecode 202", // "breakpoint",
414: "bytecode", "try", "endtry", "catch", "var", "endvar",
415: "locals_map", "stack_map" };
416:
417: /* Opcode Lengths */
418: public static final int opcLengthsTab[] = { 1, 1, 1, 1, 1, 1, 1, 1,
419: 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, 3, 2, 2, 2, 2, 2, 1, 1,
420: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
421: 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
422: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
423: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
424: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
425: 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
426: 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
427: 3, 2, 99, 99, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 5, 0,
428: 3, 2, 3, 1, 1, 3, 3, 1, 1, 0, // wide
429: 4, 3, 3, 5, 5, 1, 1, 0, 0, 0, 0, 0 // pseudo
430: };
431:
432: }
|