rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java
branchclosure
changeset 1513 ba912ef24b27
parent 1085 6a4ef883e233
parent 1474 3775fe162073
child 1639 4b09a4b689a4
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java	Tue May 07 19:01:14 2013 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeParser.java	Wed Apr 30 15:04:10 2014 +0200
     1.3 @@ -39,37 +39,6 @@
     1.4  final class ByteCodeParser {
     1.5      private ByteCodeParser() {
     1.6      }
     1.7 -    /* Signature Characters */
     1.8 -    public static final char   SIGC_VOID                  = 'V';
     1.9 -    public static final String SIG_VOID                   = "V";
    1.10 -    public static final char   SIGC_BOOLEAN               = 'Z';
    1.11 -    public static final String SIG_BOOLEAN                = "Z";
    1.12 -    public static final char   SIGC_BYTE                  = 'B';
    1.13 -    public static final String SIG_BYTE                   = "B";
    1.14 -    public static final char   SIGC_CHAR                  = 'C';
    1.15 -    public static final String SIG_CHAR                   = "C";
    1.16 -    public static final char   SIGC_SHORT                 = 'S';
    1.17 -    public static final String SIG_SHORT                  = "S";
    1.18 -    public static final char   SIGC_INT                   = 'I';
    1.19 -    public static final String SIG_INT                    = "I";
    1.20 -    public static final char   SIGC_LONG                  = 'J';
    1.21 -    public static final String SIG_LONG                   = "J";
    1.22 -    public static final char   SIGC_FLOAT                 = 'F';
    1.23 -    public static final String SIG_FLOAT                  = "F";
    1.24 -    public static final char   SIGC_DOUBLE                = 'D';
    1.25 -    public static final String SIG_DOUBLE                 = "D";
    1.26 -    public static final char   SIGC_ARRAY                 = '[';
    1.27 -    public static final String SIG_ARRAY                  = "[";
    1.28 -    public static final char   SIGC_CLASS                 = 'L';
    1.29 -    public static final String SIG_CLASS                  = "L";
    1.30 -    public static final char   SIGC_METHOD                = '(';
    1.31 -    public static final String SIG_METHOD                 = "(";
    1.32 -    public static final char   SIGC_ENDCLASS              = ';';
    1.33 -    public static final String SIG_ENDCLASS               = ";";
    1.34 -    public static final char   SIGC_ENDMETHOD             = ')';
    1.35 -    public static final String SIG_ENDMETHOD              = ")";
    1.36 -    public static final char   SIGC_PACKAGE               = '/';
    1.37 -    public static final String SIG_PACKAGE                = "/";
    1.38  
    1.39      /* Class File Constants */
    1.40      public static final int JAVA_MAGIC                   = 0xcafebabe;
    1.41 @@ -107,17 +76,6 @@
    1.42      public static final int ACC_EXPLICIT                 = 0x00001000;
    1.43      public static final int ACC_SYNTHETIC                = 0x00010000; // actually, this is an attribute
    1.44  
    1.45 -    /* Type codes */
    1.46 -    public static final int T_CLASS                      = 0x00000002;
    1.47 -    public static final int T_BOOLEAN                    = 0x00000004;
    1.48 -    public static final int T_CHAR                       = 0x00000005;
    1.49 -    public static final int T_FLOAT                      = 0x00000006;
    1.50 -    public static final int T_DOUBLE                     = 0x00000007;
    1.51 -    public static final int T_BYTE                       = 0x00000008;
    1.52 -    public static final int T_SHORT                      = 0x00000009;
    1.53 -    public static final int T_INT                        = 0x0000000a;
    1.54 -    public static final int T_LONG                       = 0x0000000b;
    1.55 -
    1.56      /* Type codes for StackMap attribute */
    1.57      public static final int ITEM_Bogus      =0; // an unknown or uninitialized value
    1.58      public static final int ITEM_Integer    =1; // a 32-bit integer
    1.59 @@ -358,7 +316,7 @@
    1.60      public static final int opc_nonpriv                  = 254;
    1.61      public static final int opc_priv                     = 255;
    1.62  
    1.63 -        /* Wide instructions */
    1.64 +        /* Wide instructions *
    1.65      public static final int opc_iload_w         = (opc_wide<<8)|opc_iload;
    1.66      public static final int opc_lload_w         = (opc_wide<<8)|opc_lload;
    1.67      public static final int opc_fload_w         = (opc_wide<<8)|opc_fload;
    1.68 @@ -371,762 +329,7 @@
    1.69      public static final int opc_astore_w        = (opc_wide<<8)|opc_astore;
    1.70      public static final int opc_ret_w           = (opc_wide<<8)|opc_ret;
    1.71      public static final int opc_iinc_w          = (opc_wide<<8)|opc_iinc;
    1.72 -
    1.73 -    /* Opcode Names */
    1.74 -  public static final String opcNamesTab[] = {
    1.75 -        "nop",
    1.76 -        "aconst_null",
    1.77 -        "iconst_m1",
    1.78 -        "iconst_0",
    1.79 -        "iconst_1",
    1.80 -        "iconst_2",
    1.81 -        "iconst_3",
    1.82 -        "iconst_4",
    1.83 -        "iconst_5",
    1.84 -        "lconst_0",
    1.85 -        "lconst_1",
    1.86 -        "fconst_0",
    1.87 -        "fconst_1",
    1.88 -        "fconst_2",
    1.89 -        "dconst_0",
    1.90 -        "dconst_1",
    1.91 -        "bipush",
    1.92 -        "sipush",
    1.93 -        "ldc",
    1.94 -        "ldc_w",
    1.95 -        "ldc2_w",
    1.96 -        "iload",
    1.97 -        "lload",
    1.98 -        "fload",
    1.99 -        "dload",
   1.100 -        "aload",
   1.101 -        "iload_0",
   1.102 -        "iload_1",
   1.103 -        "iload_2",
   1.104 -        "iload_3",
   1.105 -        "lload_0",
   1.106 -        "lload_1",
   1.107 -        "lload_2",
   1.108 -        "lload_3",
   1.109 -        "fload_0",
   1.110 -        "fload_1",
   1.111 -        "fload_2",
   1.112 -        "fload_3",
   1.113 -        "dload_0",
   1.114 -        "dload_1",
   1.115 -        "dload_2",
   1.116 -        "dload_3",
   1.117 -        "aload_0",
   1.118 -        "aload_1",
   1.119 -        "aload_2",
   1.120 -        "aload_3",
   1.121 -        "iaload",
   1.122 -        "laload",
   1.123 -        "faload",
   1.124 -        "daload",
   1.125 -        "aaload",
   1.126 -        "baload",
   1.127 -        "caload",
   1.128 -        "saload",
   1.129 -        "istore",
   1.130 -        "lstore",
   1.131 -        "fstore",
   1.132 -        "dstore",
   1.133 -        "astore",
   1.134 -        "istore_0",
   1.135 -        "istore_1",
   1.136 -        "istore_2",
   1.137 -        "istore_3",
   1.138 -        "lstore_0",
   1.139 -        "lstore_1",
   1.140 -        "lstore_2",
   1.141 -        "lstore_3",
   1.142 -        "fstore_0",
   1.143 -        "fstore_1",
   1.144 -        "fstore_2",
   1.145 -        "fstore_3",
   1.146 -        "dstore_0",
   1.147 -        "dstore_1",
   1.148 -        "dstore_2",
   1.149 -        "dstore_3",
   1.150 -        "astore_0",
   1.151 -        "astore_1",
   1.152 -        "astore_2",
   1.153 -        "astore_3",
   1.154 -        "iastore",
   1.155 -        "lastore",
   1.156 -        "fastore",
   1.157 -        "dastore",
   1.158 -        "aastore",
   1.159 -        "bastore",
   1.160 -        "castore",
   1.161 -        "sastore",
   1.162 -        "pop",
   1.163 -        "pop2",
   1.164 -        "dup",
   1.165 -        "dup_x1",
   1.166 -        "dup_x2",
   1.167 -        "dup2",
   1.168 -        "dup2_x1",
   1.169 -        "dup2_x2",
   1.170 -        "swap",
   1.171 -        "iadd",
   1.172 -        "ladd",
   1.173 -        "fadd",
   1.174 -        "dadd",
   1.175 -        "isub",
   1.176 -        "lsub",
   1.177 -        "fsub",
   1.178 -        "dsub",
   1.179 -        "imul",
   1.180 -        "lmul",
   1.181 -        "fmul",
   1.182 -        "dmul",
   1.183 -        "idiv",
   1.184 -        "ldiv",
   1.185 -        "fdiv",
   1.186 -        "ddiv",
   1.187 -        "irem",
   1.188 -        "lrem",
   1.189 -        "frem",
   1.190 -        "drem",
   1.191 -        "ineg",
   1.192 -        "lneg",
   1.193 -        "fneg",
   1.194 -        "dneg",
   1.195 -        "ishl",
   1.196 -        "lshl",
   1.197 -        "ishr",
   1.198 -        "lshr",
   1.199 -        "iushr",
   1.200 -        "lushr",
   1.201 -        "iand",
   1.202 -        "land",
   1.203 -        "ior",
   1.204 -        "lor",
   1.205 -        "ixor",
   1.206 -        "lxor",
   1.207 -        "iinc",
   1.208 -        "i2l",
   1.209 -        "i2f",
   1.210 -        "i2d",
   1.211 -        "l2i",
   1.212 -        "l2f",
   1.213 -        "l2d",
   1.214 -        "f2i",
   1.215 -        "f2l",
   1.216 -        "f2d",
   1.217 -        "d2i",
   1.218 -        "d2l",
   1.219 -        "d2f",
   1.220 -        "i2b",
   1.221 -        "i2c",
   1.222 -        "i2s",
   1.223 -        "lcmp",
   1.224 -        "fcmpl",
   1.225 -        "fcmpg",
   1.226 -        "dcmpl",
   1.227 -        "dcmpg",
   1.228 -        "ifeq",
   1.229 -        "ifne",
   1.230 -        "iflt",
   1.231 -        "ifge",
   1.232 -        "ifgt",
   1.233 -        "ifle",
   1.234 -        "if_icmpeq",
   1.235 -        "if_icmpne",
   1.236 -        "if_icmplt",
   1.237 -        "if_icmpge",
   1.238 -        "if_icmpgt",
   1.239 -        "if_icmple",
   1.240 -        "if_acmpeq",
   1.241 -        "if_acmpne",
   1.242 -        "goto",
   1.243 -        "jsr",
   1.244 -        "ret",
   1.245 -        "tableswitch",
   1.246 -        "lookupswitch",
   1.247 -        "ireturn",
   1.248 -        "lreturn",
   1.249 -        "freturn",
   1.250 -        "dreturn",
   1.251 -        "areturn",
   1.252 -        "return",
   1.253 -        "getstatic",
   1.254 -        "putstatic",
   1.255 -        "getfield",
   1.256 -        "putfield",
   1.257 -        "invokevirtual",
   1.258 -        "invokespecial", //     was "invokenonvirtual",
   1.259 -        "invokestatic",
   1.260 -        "invokeinterface",
   1.261 -        "bytecode 186", //"xxxunusedxxx",
   1.262 -        "new",
   1.263 -        "newarray",
   1.264 -        "anewarray",
   1.265 -        "arraylength",
   1.266 -        "athrow",
   1.267 -        "checkcast",
   1.268 -        "instanceof",
   1.269 -        "monitorenter",
   1.270 -        "monitorexit",
   1.271 -         null, // "wide",
   1.272 -        "multianewarray",
   1.273 -        "ifnull",
   1.274 -        "ifnonnull",
   1.275 -        "goto_w",
   1.276 -        "jsr_w",
   1.277 -        "bytecode 202", // "breakpoint",
   1.278 -        "bytecode",
   1.279 -        "try",
   1.280 -        "endtry",
   1.281 -        "catch",
   1.282 -        "var",
   1.283 -        "endvar",
   1.284 -        "locals_map",
   1.285 -        "stack_map"
   1.286 -  };
   1.287 -
   1.288 -    /* Opcode Lengths */
   1.289 -  public static final int opcLengthsTab[] = {
   1.290 -        1,
   1.291 -        1,
   1.292 -        1,
   1.293 -        1,
   1.294 -        1,
   1.295 -        1,
   1.296 -        1,
   1.297 -        1,
   1.298 -        1,
   1.299 -        1,
   1.300 -        1,
   1.301 -        1,
   1.302 -        1,
   1.303 -        1,
   1.304 -        1,
   1.305 -        1,
   1.306 -        2,
   1.307 -        3,
   1.308 -        2,
   1.309 -        3,
   1.310 -        3,
   1.311 -        2,
   1.312 -        2,
   1.313 -        2,
   1.314 -        2,
   1.315 -        2,
   1.316 -        1,
   1.317 -        1,
   1.318 -        1,
   1.319 -        1,
   1.320 -        1,
   1.321 -        1,
   1.322 -        1,
   1.323 -        1,
   1.324 -        1,
   1.325 -        1,
   1.326 -        1,
   1.327 -        1,
   1.328 -        1,
   1.329 -        1,
   1.330 -        1,
   1.331 -        1,
   1.332 -        1,
   1.333 -        1,
   1.334 -        1,
   1.335 -        1,
   1.336 -        1,
   1.337 -        1,
   1.338 -        1,
   1.339 -        1,
   1.340 -        1,
   1.341 -        1,
   1.342 -        1,
   1.343 -        1,
   1.344 -        2,
   1.345 -        2,
   1.346 -        2,
   1.347 -        2,
   1.348 -        2,
   1.349 -        1,
   1.350 -        1,
   1.351 -        1,
   1.352 -        1,
   1.353 -        1,
   1.354 -        1,
   1.355 -        1,
   1.356 -        1,
   1.357 -        1,
   1.358 -        1,
   1.359 -        1,
   1.360 -        1,
   1.361 -        1,
   1.362 -        1,
   1.363 -        1,
   1.364 -        1,
   1.365 -        1,
   1.366 -        1,
   1.367 -        1,
   1.368 -        1,
   1.369 -        1,
   1.370 -        1,
   1.371 -        1,
   1.372 -        1,
   1.373 -        1,
   1.374 -        1,
   1.375 -        1,
   1.376 -        1,
   1.377 -        1,
   1.378 -        1,
   1.379 -        1,
   1.380 -        1,
   1.381 -        1,
   1.382 -        1,
   1.383 -        1,
   1.384 -        1,
   1.385 -        1,
   1.386 -        1,
   1.387 -        1,
   1.388 -        1,
   1.389 -        1,
   1.390 -        1,
   1.391 -        1,
   1.392 -        1,
   1.393 -        1,
   1.394 -        1,
   1.395 -        1,
   1.396 -        1,
   1.397 -        1,
   1.398 -        1,
   1.399 -        1,
   1.400 -        1,
   1.401 -        1,
   1.402 -        1,
   1.403 -        1,
   1.404 -        1,
   1.405 -        1,
   1.406 -        1,
   1.407 -        1,
   1.408 -        1,
   1.409 -        1,
   1.410 -        1,
   1.411 -        1,
   1.412 -        1,
   1.413 -        1,
   1.414 -        1,
   1.415 -        1,
   1.416 -        1,
   1.417 -        1,
   1.418 -        1,
   1.419 -        1,
   1.420 -        1,
   1.421 -        1,
   1.422 -        3,
   1.423 -        1,
   1.424 -        1,
   1.425 -        1,
   1.426 -        1,
   1.427 -        1,
   1.428 -        1,
   1.429 -        1,
   1.430 -        1,
   1.431 -        1,
   1.432 -        1,
   1.433 -        1,
   1.434 -        1,
   1.435 -        1,
   1.436 -        1,
   1.437 -        1,
   1.438 -        1,
   1.439 -        1,
   1.440 -        1,
   1.441 -        1,
   1.442 -        1,
   1.443 -        3,
   1.444 -        3,
   1.445 -        3,
   1.446 -        3,
   1.447 -        3,
   1.448 -        3,
   1.449 -        3,
   1.450 -        3,
   1.451 -        3,
   1.452 -        3,
   1.453 -        3,
   1.454 -        3,
   1.455 -        3,
   1.456 -        3,
   1.457 -        3,
   1.458 -        3,
   1.459 -        2,
   1.460 -        99,
   1.461 -        99,
   1.462 -        1,
   1.463 -        1,
   1.464 -        1,
   1.465 -        1,
   1.466 -        1,
   1.467 -        1,
   1.468 -        3,
   1.469 -        3,
   1.470 -        3,
   1.471 -        3,
   1.472 -        3,
   1.473 -        3,
   1.474 -        3,
   1.475 -        5,
   1.476 -        0,
   1.477 -        3,
   1.478 -        2,
   1.479 -        3,
   1.480 -        1,
   1.481 -        1,
   1.482 -        3,
   1.483 -        3,
   1.484 -        1,
   1.485 -        1,
   1.486 -        0, // wide
   1.487 -        4,
   1.488 -        3,
   1.489 -        3,
   1.490 -        5,
   1.491 -        5,
   1.492 -        1,
   1.493 -        1, 0, 0, 0, 0, 0 // pseudo
   1.494 -  };
   1.495 -
   1.496 -     /**
   1.497 -     * End of input
   1.498 -     */
   1.499 -    public static final int EOF = -1;
   1.500 -
   1.501 -   /*
   1.502 -     * Flags
   1.503 -     */
   1.504 -    public static final int F_VERBOSE           = 1 << 0;
   1.505 -    public static final int F_DUMP              = 1 << 1;
   1.506 -    public static final int F_WARNINGS          = 1 << 2;
   1.507 -    public static final int F_DEBUG             = 1 << 3;
   1.508 -    public static final int F_OPTIMIZE          = 1 << 4;
   1.509 -    public static final int F_DEPENDENCIES      = 1 << 5;
   1.510 -
   1.511 -    /*
   1.512 -     * Type codes
   1.513 -     */
   1.514 -    public static final int TC_BOOLEAN   = 0;
   1.515 -    public static final int TC_BYTE      = 1;
   1.516 -    public static final int TC_CHAR      = 2;
   1.517 -    public static final int TC_SHORT     = 3;
   1.518 -    public static final int TC_INT       = 4;
   1.519 -    public static final int TC_LONG      = 5;
   1.520 -    public static final int TC_FLOAT     = 6;
   1.521 -    public static final int TC_DOUBLE    = 7;
   1.522 -    public static final int TC_NULL      = 8;
   1.523 -    public static final int TC_ARRAY     = 9;
   1.524 -    public static final int TC_CLASS     = 10;
   1.525 -    public static final int TC_VOID      = 11;
   1.526 -    public static final int TC_METHOD    = 12;
   1.527 -    public static final int TC_ERROR     = 13;
   1.528 -
   1.529 -    /*
   1.530 -     * Type Masks
   1.531 -     */
   1.532 -    public static final int TM_NULL      = 1 << TC_NULL;
   1.533 -    public static final int TM_VOID      = 1 << TC_VOID;
   1.534 -    public static final int TM_BOOLEAN   = 1 << TC_BOOLEAN;
   1.535 -    public static final int TM_BYTE      = 1 << TC_BYTE;
   1.536 -    public static final int TM_CHAR      = 1 << TC_CHAR;
   1.537 -    public static final int TM_SHORT     = 1 << TC_SHORT;
   1.538 -    public static final int TM_INT       = 1 << TC_INT;
   1.539 -    public static final int TM_LONG      = 1 << TC_LONG;
   1.540 -    public static final int TM_FLOAT     = 1 << TC_FLOAT;
   1.541 -    public static final int TM_DOUBLE    = 1 << TC_DOUBLE;
   1.542 -    public static final int TM_ARRAY     = 1 << TC_ARRAY;
   1.543 -    public static final int TM_CLASS     = 1 << TC_CLASS;
   1.544 -    public static final int TM_METHOD    = 1 << TC_METHOD;
   1.545 -    public static final int TM_ERROR     = 1 << TC_ERROR;
   1.546 -
   1.547 -    public static final int TM_INT32     = TM_BYTE | TM_SHORT | TM_CHAR | TM_INT;
   1.548 -    public static final int TM_NUM32     = TM_INT32 | TM_FLOAT;
   1.549 -    public static final int TM_NUM64     = TM_LONG | TM_DOUBLE;
   1.550 -    public static final int TM_INTEGER   = TM_INT32 | TM_LONG;
   1.551 -    public static final int TM_REAL      = TM_FLOAT | TM_DOUBLE;
   1.552 -    public static final int TM_NUMBER    = TM_INTEGER | TM_REAL;
   1.553 -    public static final int TM_REFERENCE = TM_ARRAY | TM_CLASS | TM_NULL;
   1.554 -
   1.555 -    /*
   1.556 -     * Class status
   1.557 -     */
   1.558 -    public static final int CS_UNDEFINED        = 0;
   1.559 -    public static final int CS_UNDECIDED        = 1;
   1.560 -    public static final int CS_BINARY           = 2;
   1.561 -    public static final int CS_SOURCE           = 3;
   1.562 -    public static final int CS_PARSED           = 4;
   1.563 -    public static final int CS_COMPILED         = 5;
   1.564 -    public static final int CS_NOTFOUND         = 6;
   1.565 -
   1.566 -    /*
   1.567 -     * Attributes
   1.568 -     */
   1.569 -    public static final int ATT_ALL             = -1;
   1.570 -    public static final int ATT_CODE            = 1;
   1.571 -
   1.572 -    /*
   1.573 -     * Number of bits used in file offsets
   1.574 -     */
   1.575 -    public static final int OFFSETBITS          = 19;
   1.576 -    public static final int MAXFILESIZE         = (1 << OFFSETBITS) - 1;
   1.577 -    public static final int MAXLINENUMBER       = (1 << (32 - OFFSETBITS)) - 1;
   1.578 -
   1.579 -    /*
   1.580 -     * Operators
   1.581 -     */
   1.582 -    public final int COMMA              = 0;
   1.583 -    public final int ASSIGN             = 1;
   1.584 -
   1.585 -    public final int ASGMUL             = 2;
   1.586 -    public final int ASGDIV             = 3;
   1.587 -    public final int ASGREM             = 4;
   1.588 -    public final int ASGADD             = 5;
   1.589 -    public final int ASGSUB             = 6;
   1.590 -    public final int ASGLSHIFT          = 7;
   1.591 -    public final int ASGRSHIFT          = 8;
   1.592 -    public final int ASGURSHIFT         = 9;
   1.593 -    public final int ASGBITAND          = 10;
   1.594 -    public final int ASGBITOR           = 11;
   1.595 -    public final int ASGBITXOR          = 12;
   1.596 -
   1.597 -    public final int COND               = 13;
   1.598 -    public final int OR                 = 14;
   1.599 -    public final int AND                = 15;
   1.600 -    public final int BITOR              = 16;
   1.601 -    public final int BITXOR             = 17;
   1.602 -    public final int BITAND             = 18;
   1.603 -    public final int NE                 = 19;
   1.604 -    public final int EQ                 = 20;
   1.605 -    public final int GE                 = 21;
   1.606 -    public final int GT                 = 22;
   1.607 -    public final int LE                 = 23;
   1.608 -    public final int LT                 = 24;
   1.609 -    public final int INSTANCEOF         = 25;
   1.610 -    public final int LSHIFT             = 26;
   1.611 -    public final int RSHIFT             = 27;
   1.612 -    public final int URSHIFT            = 28;
   1.613 -    public final int ADD                = 29;
   1.614 -    public final int SUB                = 30;
   1.615 -    public final int DIV                = 31;
   1.616 -    public final int REM                = 32;
   1.617 -    public final int MUL                = 33;
   1.618 -    public final int CAST               = 34;           // (x)y
   1.619 -    public final int POS                = 35;           // +x
   1.620 -    public final int NEG                = 36;           // -x
   1.621 -    public final int NOT                = 37;
   1.622 -    public final int BITNOT             = 38;
   1.623 -    public final int PREINC             = 39;           // ++x
   1.624 -    public final int PREDEC             = 40;           // --x
   1.625 -    public final int NEWARRAY           = 41;
   1.626 -    public final int NEWINSTANCE        = 42;
   1.627 -    public final int NEWFROMNAME        = 43;
   1.628 -    public final int POSTINC            = 44;           // x++
   1.629 -    public final int POSTDEC            = 45;           // x--
   1.630 -    public final int FIELD              = 46;
   1.631 -    public final int METHOD             = 47;           // x(y)
   1.632 -    public final int ARRAYACCESS        = 48;           // x[y]
   1.633 -    public final int NEW                = 49;
   1.634 -    public final int INC                = 50;
   1.635 -    public final int DEC                = 51;
   1.636 -
   1.637 -    public final int CONVERT            = 55;           // implicit conversion
   1.638 -    public final int EXPR               = 56;           // (x)
   1.639 -    public final int ARRAY              = 57;           // {x, y, ...}
   1.640 -    public final int GOTO               = 58;
   1.641 -
   1.642 -    /*
   1.643 -     * Value tokens
   1.644 -     */
   1.645 -    public final int IDENT              = 60;
   1.646 -    public final int BOOLEANVAL         = 61;
   1.647 -    public final int BYTEVAL            = 62;
   1.648 -    public final int CHARVAL            = 63;
   1.649 -    public final int SHORTVAL           = 64;
   1.650 -    public final int INTVAL                     = 65;
   1.651 -    public final int LONGVAL            = 66;
   1.652 -    public final int FLOATVAL           = 67;
   1.653 -    public final int DOUBLEVAL          = 68;
   1.654 -    public final int STRINGVAL          = 69;
   1.655 -
   1.656 -    /*
   1.657 -     * Type keywords
   1.658 -     */
   1.659 -    public final int BYTE               = 70;
   1.660 -    public final int CHAR               = 71;
   1.661 -    public final int SHORT              = 72;
   1.662 -    public final int INT                = 73;
   1.663 -    public final int LONG               = 74;
   1.664 -    public final int FLOAT              = 75;
   1.665 -    public final int DOUBLE             = 76;
   1.666 -    public final int VOID               = 77;
   1.667 -    public final int BOOLEAN            = 78;
   1.668 -
   1.669 -    /*
   1.670 -     * Expression keywords
   1.671 -     */
   1.672 -    public final int TRUE               = 80;
   1.673 -    public final int FALSE              = 81;
   1.674 -    public final int THIS               = 82;
   1.675 -    public final int SUPER              = 83;
   1.676 -    public final int NULL               = 84;
   1.677 -
   1.678 -    /*
   1.679 -     * Statement keywords
   1.680 -     */
   1.681 -    public final int IF                 = 90;
   1.682 -    public final int ELSE               = 91;
   1.683 -    public final int FOR                = 92;
   1.684 -    public final int WHILE              = 93;
   1.685 -    public final int DO                 = 94;
   1.686 -    public final int SWITCH             = 95;
   1.687 -    public final int CASE               = 96;
   1.688 -    public final int DEFAULT            = 97;
   1.689 -    public final int BREAK              = 98;
   1.690 -    public final int CONTINUE           = 99;
   1.691 -    public final int RETURN             = 100;
   1.692 -    public final int TRY                = 101;
   1.693 -    public final int CATCH              = 102;
   1.694 -    public final int FINALLY            = 103;
   1.695 -    public final int THROW              = 104;
   1.696 -    public final int STAT               = 105;
   1.697 -    public final int EXPRESSION         = 106;
   1.698 -    public final int DECLARATION        = 107;
   1.699 -    public final int VARDECLARATION     = 108;
   1.700 -
   1.701 -    /*
   1.702 -     * Declaration keywords
   1.703 -     */
   1.704 -    public final int IMPORT             = 110;
   1.705 -    public final int CLASS              = 111;
   1.706 -    public final int EXTENDS            = 112;
   1.707 -    public final int IMPLEMENTS         = 113;
   1.708 -    public final int INTERFACE          = 114;
   1.709 -    public final int PACKAGE            = 115;
   1.710 -
   1.711 -    /*
   1.712 -     * Modifier keywords
   1.713 -     */
   1.714 -    public final int PRIVATE    = 120;
   1.715 -    public final int PUBLIC             = 121;
   1.716 -    public final int PROTECTED  = 122;
   1.717 -    public final int CONST              = 123;
   1.718 -    public final int STATIC             = 124;
   1.719 -    public final int TRANSIENT          = 125;
   1.720 -    public final int SYNCHRONIZED       = 126;
   1.721 -    public final int NATIVE             = 127;
   1.722 -    public final int FINAL              = 128;
   1.723 -    public final int VOLATILE   = 129;
   1.724 -    public final int ABSTRACT   = 130;
   1.725 -    public final int STRICT             = 165;
   1.726 -
   1.727 -    /*
   1.728 -     * Punctuation
   1.729 -     */
   1.730 -    public final int SEMICOLON  = 135;
   1.731 -    public final int COLON              = 136;
   1.732 -    public final int QUESTIONMARK       = 137;
   1.733 -    public final int LBRACE             = 138;
   1.734 -    public final int RBRACE             = 139;
   1.735 -    public final int LPAREN             = 140;
   1.736 -    public final int RPAREN             = 141;
   1.737 -    public final int LSQBRACKET = 142;
   1.738 -    public final int RSQBRACKET = 143;
   1.739 -    public final int THROWS     = 144;
   1.740 -
   1.741 -    /*
   1.742 -     * Special tokens
   1.743 -     */
   1.744 -    public final int ERROR              = 145;          // an error
   1.745 -    public final int COMMENT    = 146;          // not used anymore.
   1.746 -    public final int TYPE               = 147;
   1.747 -    public final int LENGTH             = 148;
   1.748 -    public final int INLINERETURN       = 149;
   1.749 -    public final int INLINEMETHOD       = 150;
   1.750 -    public final int INLINENEWINSTANCE  = 151;
   1.751 -
   1.752 -    /*
   1.753 -     * Added for jasm
   1.754 -     */
   1.755 -        public final int METHODREF      = 152;
   1.756 -        public final int FIELDREF       = 153;
   1.757 -    public final int STACK              = 154;
   1.758 -    public final int LOCAL              = 155;
   1.759 -    public final int CPINDEX    = 156;
   1.760 -    public final int CPNAME             = 157;
   1.761 -    public final int SIGN               = 158;
   1.762 -    public final int BITS               = 159;
   1.763 -    public final int INF                = 160;
   1.764 -    public final int NAN                = 161;
   1.765 -    public final int INNERCLASS = 162;
   1.766 -    public final int OF         = 163;
   1.767 -    public final int SYNTHETIC          = 164;
   1.768 -// last used=165;
   1.769 -
   1.770 -   /*
   1.771 -     * Operator precedence
   1.772 -     */
   1.773 -    public static final int opPrecedence[] = {
   1.774 -        10,     11,     11,     11,     11,     11,     11,     11,     11,     11,
   1.775 -        11,     11,     11,     12,     13,     14,     15,     16,     17,     18,
   1.776 -        18,     19,     19,     19,     19,     19,     20,     20,     20,     21,
   1.777 -        21,     22,     22,     22,     23,     24,     24,     24,     24,     24,
   1.778 -        24,     25,     25,     26,     26,     26,     26,     26,     26
   1.779 -    };
   1.780 -
   1.781 -    /*
   1.782 -     * Operator names
   1.783 -     */
   1.784 -    public static final String opNames[] = {
   1.785 -        ",",            "=",            "*=",           "/=",           "%=",
   1.786 -        "+=",           "-=",           "<<=",          ">>=",          "<<<=",
   1.787 -        "&=",           "|=",           "^=",           "?:",           "||",
   1.788 -        "&&",           "|",            "^",            "&",            "!=",
   1.789 -        "==",           ">=",           ">",            "<=",           "<",
   1.790 -        "instanceof",   "<<",           ">>",           "<<<",          "+",
   1.791 -        "-",            "/",            "%",            "*",            "cast",
   1.792 -        "+",            "-",            "!",            "~",            "++",
   1.793 -        "--",           "new",          "new",          "new",          "++",
   1.794 -        "--",           "field",        "method",       "[]",           "new",
   1.795 -        "++",           "--",           null,           null,           null,
   1.796 -
   1.797 -        "convert",      "expr",         "array",        "goto",         null,
   1.798 -
   1.799 -        "Identifier",   "Boolean",      "Byte",         "Char",         "Short",
   1.800 -        "Integer",              "Long",         "Float",        "Double",       "String",
   1.801 -
   1.802 -        "byte",         "char",         "short",        "int",          "long",
   1.803 -        "float",        "double",       "void",         "boolean",      null,
   1.804 -
   1.805 -        "true",         "false",        "this",         "super",        "null",
   1.806 -        null,           null,           null,           null,           null,
   1.807 -
   1.808 -        "if",           "else",         "for",          "while",        "do",
   1.809 -        "switch",       "case",         "default",      "break",        "continue",
   1.810 -        "return",       "try",          "catch",        "finally",      "throw",
   1.811 -        "stat",         "expression",   "declaration",  "declaration",  null,
   1.812 -
   1.813 -        "import",       "class",        "extends",      "implements",   "interface",
   1.814 -        "package",      null,           null,           null,           null,
   1.815 -
   1.816 -        "private",      "public",       "protected",    "const",        "static",
   1.817 -        "transient",    "synchronized", "native",       "final",        "volatile",
   1.818 -        "abstract",     null,           null,           null,           null,
   1.819 -
   1.820 -        ";",            ":",            "?",            "{",            "}",
   1.821 -        "(",            ")",            "[",            "]",            "throws",
   1.822 -        "error",        "comment",      "type",         "length",       "inline-return",
   1.823 -        "inline-method", "inline-new",
   1.824 -        "method", "field", "stack", "locals", "CPINDEX", "CPName", "SIGN",
   1.825 -        "bits", "INF", "NaN", "InnerClass", "of", "synthetic"
   1.826 -    };
   1.827 -    
   1.828 +*/
   1.829      static class AnnotationParser {
   1.830  
   1.831          private final boolean textual;
   1.832 @@ -1332,15 +535,11 @@
   1.833          private int super_class;
   1.834          private int interfaces_count;
   1.835          private int[] interfaces = new int[0];
   1.836 -        private int fields_count;
   1.837          private FieldData[] fields;
   1.838 -        private int methods_count;
   1.839          private MethodData[] methods;
   1.840          private InnerClassData[] innerClasses;
   1.841          private int attributes_count;
   1.842          private AttrData[] attrs;
   1.843 -        private String classname;
   1.844 -        private String superclassname;
   1.845          private int source_cpx = 0;
   1.846          private byte tags[];
   1.847          private Hashtable indexHashAscii = new Hashtable();
   1.848 @@ -1845,6 +1044,12 @@
   1.849                              case '\"':
   1.850                                  sb.append('\\').append('\"');
   1.851                                  break;
   1.852 +                            case '\u2028':
   1.853 +                                sb.append("\\u2028");
   1.854 +                                break;
   1.855 +                            case '\u2029':
   1.856 +                                sb.append("\\u2029");
   1.857 +                                break;
   1.858                              default:
   1.859                                  sb.append(c);
   1.860                          }
   1.861 @@ -2080,7 +1285,7 @@
   1.862          int name_index;
   1.863          int descriptor_index;
   1.864          int attributes_count;
   1.865 -        int value_cpx = 0;
   1.866 +        int value_cpx = -1;
   1.867          boolean isSynthetic = false;
   1.868          boolean isDeprecated = false;
   1.869          Vector attrs;
   1.870 @@ -2201,11 +1406,8 @@
   1.871              return isDeprecated;
   1.872          }
   1.873  
   1.874 -        /**
   1.875 -         * Returns index of constant value in cpool.
   1.876 -         */
   1.877 -        public int getConstantValueIndex() {
   1.878 -            return (value_cpx);
   1.879 +        public boolean hasConstantValue() {
   1.880 +            return value_cpx != -1;
   1.881          }
   1.882  
   1.883          /**
   1.884 @@ -2824,6 +2026,10 @@
   1.885              lastFrameByteCodeOffset = -1;
   1.886              advanceBy(0);
   1.887          }
   1.888 +        
   1.889 +        public boolean isEmpty() {
   1.890 +            return stackMapTable.length == 0;
   1.891 +        }
   1.892  
   1.893          public String getFrameAsString() {
   1.894              return (nextFrameIndex == 0)