3789983e89
Reviewed-by: darcy, ihse
731 lines
18 KiB
Java
731 lines
18 KiB
Java
/*
|
|
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
public interface RuntimeConstants {
|
|
|
|
/* Signature Characters */
|
|
char SIGC_VOID = 'V';
|
|
String SIG_VOID = "V";
|
|
char SIGC_BOOLEAN = 'Z';
|
|
String SIG_BOOLEAN = "Z";
|
|
char SIGC_BYTE = 'B';
|
|
String SIG_BYTE = "B";
|
|
char SIGC_CHAR = 'C';
|
|
String SIG_CHAR = "C";
|
|
char SIGC_SHORT = 'S';
|
|
String SIG_SHORT = "S";
|
|
char SIGC_INT = 'I';
|
|
String SIG_INT = "I";
|
|
char SIGC_LONG = 'J';
|
|
String SIG_LONG = "J";
|
|
char SIGC_FLOAT = 'F';
|
|
String SIG_FLOAT = "F";
|
|
char SIGC_DOUBLE = 'D';
|
|
String SIG_DOUBLE = "D";
|
|
char SIGC_ARRAY = '[';
|
|
String SIG_ARRAY = "[";
|
|
char SIGC_CLASS = 'L';
|
|
String SIG_CLASS = "L";
|
|
char SIGC_METHOD = '(';
|
|
String SIG_METHOD = "(";
|
|
char SIGC_ENDCLASS = ';';
|
|
String SIG_ENDCLASS = ";";
|
|
char SIGC_ENDMETHOD = ')';
|
|
String SIG_ENDMETHOD = ")";
|
|
char SIGC_PACKAGE = '/';
|
|
String SIG_PACKAGE = "/";
|
|
|
|
/* Class File Constants */
|
|
int JAVA_MAGIC = 0xcafebabe;
|
|
int JAVA_MIN_SUPPORTED_VERSION = 45;
|
|
int JAVA_MAX_SUPPORTED_VERSION = 48;
|
|
int JAVA_MAX_SUPPORTED_MINOR_VERSION = 0;
|
|
|
|
/* Generate class file version for 1.1 by default */
|
|
int JAVA_DEFAULT_VERSION = 45;
|
|
int JAVA_DEFAULT_MINOR_VERSION = 3;
|
|
|
|
/* Constant table */
|
|
int CONSTANT_UTF8 = 1;
|
|
int CONSTANT_UNICODE = 2;
|
|
int CONSTANT_INTEGER = 3;
|
|
int CONSTANT_FLOAT = 4;
|
|
int CONSTANT_LONG = 5;
|
|
int CONSTANT_DOUBLE = 6;
|
|
int CONSTANT_CLASS = 7;
|
|
int CONSTANT_STRING = 8;
|
|
int CONSTANT_FIELD = 9;
|
|
int CONSTANT_METHOD = 10;
|
|
int CONSTANT_INTERFACEMETHOD = 11;
|
|
int CONSTANT_NAMEANDTYPE = 12;
|
|
|
|
/* Access and modifier flags */
|
|
int ACC_PUBLIC = 0x00000001;
|
|
int ACC_PRIVATE = 0x00000002;
|
|
int ACC_PROTECTED = 0x00000004;
|
|
int ACC_STATIC = 0x00000008;
|
|
int ACC_FINAL = 0x00000010;
|
|
int ACC_SYNCHRONIZED = 0x00000020;
|
|
int ACC_VOLATILE = 0x00000040;
|
|
int ACC_TRANSIENT = 0x00000080;
|
|
int ACC_NATIVE = 0x00000100;
|
|
int ACC_INTERFACE = 0x00000200;
|
|
int ACC_ABSTRACT = 0x00000400;
|
|
int ACC_SUPER = 0x00000020;
|
|
int ACC_STRICT = 0x00000800;
|
|
|
|
/* Type codes */
|
|
int T_CLASS = 0x00000002;
|
|
int T_BOOLEAN = 0x00000004;
|
|
int T_CHAR = 0x00000005;
|
|
int T_FLOAT = 0x00000006;
|
|
int T_DOUBLE = 0x00000007;
|
|
int T_BYTE = 0x00000008;
|
|
int T_SHORT = 0x00000009;
|
|
int T_INT = 0x0000000a;
|
|
int T_LONG = 0x0000000b;
|
|
|
|
/* Opcodes */
|
|
int opc_try = -3;
|
|
int opc_dead = -2;
|
|
int opc_label = -1;
|
|
int opc_nop = 0;
|
|
int opc_aconst_null = 1;
|
|
int opc_iconst_m1 = 2;
|
|
int opc_iconst_0 = 3;
|
|
int opc_iconst_1 = 4;
|
|
int opc_iconst_2 = 5;
|
|
int opc_iconst_3 = 6;
|
|
int opc_iconst_4 = 7;
|
|
int opc_iconst_5 = 8;
|
|
int opc_lconst_0 = 9;
|
|
int opc_lconst_1 = 10;
|
|
int opc_fconst_0 = 11;
|
|
int opc_fconst_1 = 12;
|
|
int opc_fconst_2 = 13;
|
|
int opc_dconst_0 = 14;
|
|
int opc_dconst_1 = 15;
|
|
int opc_bipush = 16;
|
|
int opc_sipush = 17;
|
|
int opc_ldc = 18;
|
|
int opc_ldc_w = 19;
|
|
int opc_ldc2_w = 20;
|
|
int opc_iload = 21;
|
|
int opc_lload = 22;
|
|
int opc_fload = 23;
|
|
int opc_dload = 24;
|
|
int opc_aload = 25;
|
|
int opc_iload_0 = 26;
|
|
int opc_iload_1 = 27;
|
|
int opc_iload_2 = 28;
|
|
int opc_iload_3 = 29;
|
|
int opc_lload_0 = 30;
|
|
int opc_lload_1 = 31;
|
|
int opc_lload_2 = 32;
|
|
int opc_lload_3 = 33;
|
|
int opc_fload_0 = 34;
|
|
int opc_fload_1 = 35;
|
|
int opc_fload_2 = 36;
|
|
int opc_fload_3 = 37;
|
|
int opc_dload_0 = 38;
|
|
int opc_dload_1 = 39;
|
|
int opc_dload_2 = 40;
|
|
int opc_dload_3 = 41;
|
|
int opc_aload_0 = 42;
|
|
int opc_aload_1 = 43;
|
|
int opc_aload_2 = 44;
|
|
int opc_aload_3 = 45;
|
|
int opc_iaload = 46;
|
|
int opc_laload = 47;
|
|
int opc_faload = 48;
|
|
int opc_daload = 49;
|
|
int opc_aaload = 50;
|
|
int opc_baload = 51;
|
|
int opc_caload = 52;
|
|
int opc_saload = 53;
|
|
int opc_istore = 54;
|
|
int opc_lstore = 55;
|
|
int opc_fstore = 56;
|
|
int opc_dstore = 57;
|
|
int opc_astore = 58;
|
|
int opc_istore_0 = 59;
|
|
int opc_istore_1 = 60;
|
|
int opc_istore_2 = 61;
|
|
int opc_istore_3 = 62;
|
|
int opc_lstore_0 = 63;
|
|
int opc_lstore_1 = 64;
|
|
int opc_lstore_2 = 65;
|
|
int opc_lstore_3 = 66;
|
|
int opc_fstore_0 = 67;
|
|
int opc_fstore_1 = 68;
|
|
int opc_fstore_2 = 69;
|
|
int opc_fstore_3 = 70;
|
|
int opc_dstore_0 = 71;
|
|
int opc_dstore_1 = 72;
|
|
int opc_dstore_2 = 73;
|
|
int opc_dstore_3 = 74;
|
|
int opc_astore_0 = 75;
|
|
int opc_astore_1 = 76;
|
|
int opc_astore_2 = 77;
|
|
int opc_astore_3 = 78;
|
|
int opc_iastore = 79;
|
|
int opc_lastore = 80;
|
|
int opc_fastore = 81;
|
|
int opc_dastore = 82;
|
|
int opc_aastore = 83;
|
|
int opc_bastore = 84;
|
|
int opc_castore = 85;
|
|
int opc_sastore = 86;
|
|
int opc_pop = 87;
|
|
int opc_pop2 = 88;
|
|
int opc_dup = 89;
|
|
int opc_dup_x1 = 90;
|
|
int opc_dup_x2 = 91;
|
|
int opc_dup2 = 92;
|
|
int opc_dup2_x1 = 93;
|
|
int opc_dup2_x2 = 94;
|
|
int opc_swap = 95;
|
|
int opc_iadd = 96;
|
|
int opc_ladd = 97;
|
|
int opc_fadd = 98;
|
|
int opc_dadd = 99;
|
|
int opc_isub = 100;
|
|
int opc_lsub = 101;
|
|
int opc_fsub = 102;
|
|
int opc_dsub = 103;
|
|
int opc_imul = 104;
|
|
int opc_lmul = 105;
|
|
int opc_fmul = 106;
|
|
int opc_dmul = 107;
|
|
int opc_idiv = 108;
|
|
int opc_ldiv = 109;
|
|
int opc_fdiv = 110;
|
|
int opc_ddiv = 111;
|
|
int opc_irem = 112;
|
|
int opc_lrem = 113;
|
|
int opc_frem = 114;
|
|
int opc_drem = 115;
|
|
int opc_ineg = 116;
|
|
int opc_lneg = 117;
|
|
int opc_fneg = 118;
|
|
int opc_dneg = 119;
|
|
int opc_ishl = 120;
|
|
int opc_lshl = 121;
|
|
int opc_ishr = 122;
|
|
int opc_lshr = 123;
|
|
int opc_iushr = 124;
|
|
int opc_lushr = 125;
|
|
int opc_iand = 126;
|
|
int opc_land = 127;
|
|
int opc_ior = 128;
|
|
int opc_lor = 129;
|
|
int opc_ixor = 130;
|
|
int opc_lxor = 131;
|
|
int opc_iinc = 132;
|
|
int opc_i2l = 133;
|
|
int opc_i2f = 134;
|
|
int opc_i2d = 135;
|
|
int opc_l2i = 136;
|
|
int opc_l2f = 137;
|
|
int opc_l2d = 138;
|
|
int opc_f2i = 139;
|
|
int opc_f2l = 140;
|
|
int opc_f2d = 141;
|
|
int opc_d2i = 142;
|
|
int opc_d2l = 143;
|
|
int opc_d2f = 144;
|
|
int opc_i2b = 145;
|
|
int opc_i2c = 146;
|
|
int opc_i2s = 147;
|
|
int opc_lcmp = 148;
|
|
int opc_fcmpl = 149;
|
|
int opc_fcmpg = 150;
|
|
int opc_dcmpl = 151;
|
|
int opc_dcmpg = 152;
|
|
int opc_ifeq = 153;
|
|
int opc_ifne = 154;
|
|
int opc_iflt = 155;
|
|
int opc_ifge = 156;
|
|
int opc_ifgt = 157;
|
|
int opc_ifle = 158;
|
|
int opc_if_icmpeq = 159;
|
|
int opc_if_icmpne = 160;
|
|
int opc_if_icmplt = 161;
|
|
int opc_if_icmpge = 162;
|
|
int opc_if_icmpgt = 163;
|
|
int opc_if_icmple = 164;
|
|
int opc_if_acmpeq = 165;
|
|
int opc_if_acmpne = 166;
|
|
int opc_goto = 167;
|
|
int opc_jsr = 168;
|
|
int opc_ret = 169;
|
|
int opc_tableswitch = 170;
|
|
int opc_lookupswitch = 171;
|
|
int opc_ireturn = 172;
|
|
int opc_lreturn = 173;
|
|
int opc_freturn = 174;
|
|
int opc_dreturn = 175;
|
|
int opc_areturn = 176;
|
|
int opc_return = 177;
|
|
int opc_getstatic = 178;
|
|
int opc_putstatic = 179;
|
|
int opc_getfield = 180;
|
|
int opc_putfield = 181;
|
|
int opc_invokevirtual = 182;
|
|
int opc_invokespecial = 183;
|
|
int opc_invokestatic = 184;
|
|
int opc_invokeinterface = 185;
|
|
int opc_xxxunusedxxx = 186;
|
|
int opc_new = 187;
|
|
int opc_newarray = 188;
|
|
int opc_anewarray = 189;
|
|
int opc_arraylength = 190;
|
|
int opc_athrow = 191;
|
|
int opc_checkcast = 192;
|
|
int opc_instanceof = 193;
|
|
int opc_monitorenter = 194;
|
|
int opc_monitorexit = 195;
|
|
int opc_wide = 196;
|
|
int opc_multianewarray = 197;
|
|
int opc_ifnull = 198;
|
|
int opc_ifnonnull = 199;
|
|
int opc_goto_w = 200;
|
|
int opc_jsr_w = 201;
|
|
int opc_breakpoint = 202;
|
|
|
|
/* Opcode Names */
|
|
String opcNames[] = {
|
|
"nop",
|
|
"aconst_null",
|
|
"iconst_m1",
|
|
"iconst_0",
|
|
"iconst_1",
|
|
"iconst_2",
|
|
"iconst_3",
|
|
"iconst_4",
|
|
"iconst_5",
|
|
"lconst_0",
|
|
"lconst_1",
|
|
"fconst_0",
|
|
"fconst_1",
|
|
"fconst_2",
|
|
"dconst_0",
|
|
"dconst_1",
|
|
"bipush",
|
|
"sipush",
|
|
"ldc",
|
|
"ldc_w",
|
|
"ldc2_w",
|
|
"iload",
|
|
"lload",
|
|
"fload",
|
|
"dload",
|
|
"aload",
|
|
"iload_0",
|
|
"iload_1",
|
|
"iload_2",
|
|
"iload_3",
|
|
"lload_0",
|
|
"lload_1",
|
|
"lload_2",
|
|
"lload_3",
|
|
"fload_0",
|
|
"fload_1",
|
|
"fload_2",
|
|
"fload_3",
|
|
"dload_0",
|
|
"dload_1",
|
|
"dload_2",
|
|
"dload_3",
|
|
"aload_0",
|
|
"aload_1",
|
|
"aload_2",
|
|
"aload_3",
|
|
"iaload",
|
|
"laload",
|
|
"faload",
|
|
"daload",
|
|
"aaload",
|
|
"baload",
|
|
"caload",
|
|
"saload",
|
|
"istore",
|
|
"lstore",
|
|
"fstore",
|
|
"dstore",
|
|
"astore",
|
|
"istore_0",
|
|
"istore_1",
|
|
"istore_2",
|
|
"istore_3",
|
|
"lstore_0",
|
|
"lstore_1",
|
|
"lstore_2",
|
|
"lstore_3",
|
|
"fstore_0",
|
|
"fstore_1",
|
|
"fstore_2",
|
|
"fstore_3",
|
|
"dstore_0",
|
|
"dstore_1",
|
|
"dstore_2",
|
|
"dstore_3",
|
|
"astore_0",
|
|
"astore_1",
|
|
"astore_2",
|
|
"astore_3",
|
|
"iastore",
|
|
"lastore",
|
|
"fastore",
|
|
"dastore",
|
|
"aastore",
|
|
"bastore",
|
|
"castore",
|
|
"sastore",
|
|
"pop",
|
|
"pop2",
|
|
"dup",
|
|
"dup_x1",
|
|
"dup_x2",
|
|
"dup2",
|
|
"dup2_x1",
|
|
"dup2_x2",
|
|
"swap",
|
|
"iadd",
|
|
"ladd",
|
|
"fadd",
|
|
"dadd",
|
|
"isub",
|
|
"lsub",
|
|
"fsub",
|
|
"dsub",
|
|
"imul",
|
|
"lmul",
|
|
"fmul",
|
|
"dmul",
|
|
"idiv",
|
|
"ldiv",
|
|
"fdiv",
|
|
"ddiv",
|
|
"irem",
|
|
"lrem",
|
|
"frem",
|
|
"drem",
|
|
"ineg",
|
|
"lneg",
|
|
"fneg",
|
|
"dneg",
|
|
"ishl",
|
|
"lshl",
|
|
"ishr",
|
|
"lshr",
|
|
"iushr",
|
|
"lushr",
|
|
"iand",
|
|
"land",
|
|
"ior",
|
|
"lor",
|
|
"ixor",
|
|
"lxor",
|
|
"iinc",
|
|
"i2l",
|
|
"i2f",
|
|
"i2d",
|
|
"l2i",
|
|
"l2f",
|
|
"l2d",
|
|
"f2i",
|
|
"f2l",
|
|
"f2d",
|
|
"d2i",
|
|
"d2l",
|
|
"d2f",
|
|
"i2b",
|
|
"i2c",
|
|
"i2s",
|
|
"lcmp",
|
|
"fcmpl",
|
|
"fcmpg",
|
|
"dcmpl",
|
|
"dcmpg",
|
|
"ifeq",
|
|
"ifne",
|
|
"iflt",
|
|
"ifge",
|
|
"ifgt",
|
|
"ifle",
|
|
"if_icmpeq",
|
|
"if_icmpne",
|
|
"if_icmplt",
|
|
"if_icmpge",
|
|
"if_icmpgt",
|
|
"if_icmple",
|
|
"if_acmpeq",
|
|
"if_acmpne",
|
|
"goto",
|
|
"jsr",
|
|
"ret",
|
|
"tableswitch",
|
|
"lookupswitch",
|
|
"ireturn",
|
|
"lreturn",
|
|
"freturn",
|
|
"dreturn",
|
|
"areturn",
|
|
"return",
|
|
"getstatic",
|
|
"putstatic",
|
|
"getfield",
|
|
"putfield",
|
|
"invokevirtual",
|
|
"invokespecial",
|
|
"invokestatic",
|
|
"invokeinterface",
|
|
"xxxunusedxxx",
|
|
"new",
|
|
"newarray",
|
|
"anewarray",
|
|
"arraylength",
|
|
"athrow",
|
|
"checkcast",
|
|
"instanceof",
|
|
"monitorenter",
|
|
"monitorexit",
|
|
"wide",
|
|
"multianewarray",
|
|
"ifnull",
|
|
"ifnonnull",
|
|
"goto_w",
|
|
"jsr_w",
|
|
"breakpoint"
|
|
};
|
|
|
|
/* Opcode Lengths */
|
|
int opcLengths[] = {
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
2,
|
|
3,
|
|
2,
|
|
3,
|
|
3,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
2,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
3,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
2,
|
|
99,
|
|
99,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
1,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
3,
|
|
5,
|
|
0,
|
|
3,
|
|
2,
|
|
3,
|
|
1,
|
|
1,
|
|
3,
|
|
3,
|
|
1,
|
|
1,
|
|
0,
|
|
4,
|
|
3,
|
|
3,
|
|
5,
|
|
5,
|
|
1
|
|
};
|
|
|
|
}
|