1 /*
   2  * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 // classfile constants
  27 #define JAVA_MAGIC 0xCAFEBABE
  28 
  29 // Class version history, refer to Constants.java
  30 
  31 // package file constants
  32 #define JAVA_PACKAGE_MAGIC 0xCAFED00D
  33 #define JAVA5_PACKAGE_MAJOR_VERSION 150
  34 #define JAVA5_PACKAGE_MINOR_VERSION 7
  35 
  36 #define JAVA6_PACKAGE_MAJOR_VERSION 160
  37 #define JAVA6_PACKAGE_MINOR_VERSION 1
  38 
  39 #define JAVA7_PACKAGE_MAJOR_VERSION 170
  40 #define JAVA7_PACKAGE_MINOR_VERSION 1
  41 
  42 #define JAVA8_PACKAGE_MAJOR_VERSION 171
  43 #define JAVA8_PACKAGE_MINOR_VERSION 0
  44 
  45 // magic number for gzip streams (for processing pack200-gzip data)
  46 #define GZIP_MAGIC      0x1F8B0800
  47 #define GZIP_MAGIC_MASK 0xFFFFFF00  // last byte is variable "flg" field
  48 
  49 enum {
  50     CONSTANT_None               = 0,
  51     CONSTANT_Utf8               = 1,
  52     CONSTANT_unused             = 2,     /* unused, was Unicode */
  53     CONSTANT_Integer            = 3,
  54     CONSTANT_Float              = 4,
  55     CONSTANT_Long               = 5,
  56     CONSTANT_Double             = 6,
  57     CONSTANT_Class              = 7,
  58     CONSTANT_String             = 8,
  59     CONSTANT_Fieldref           = 9,
  60     CONSTANT_Methodref          = 10,
  61     CONSTANT_InterfaceMethodref = 11,
  62     CONSTANT_NameandType        = 12,
  63     CONSTANT_unused13           = 13,
  64     CONSTANT_unused14           = 14,
  65     CONSTANT_MethodHandle       = 15,
  66     CONSTANT_MethodType         = 16,
  67     CONSTANT_unused17           = 17,
  68     CONSTANT_InvokeDynamic      = 18,
  69     CONSTANT_Limit              = 19,
  70     CONSTANT_Signature          = CONSTANT_unused13,
  71     CONSTANT_BootstrapMethod    = CONSTANT_unused17, // used only for InvokeDynamic
  72     CONSTANT_All                = 50,                // combined global map
  73     CONSTANT_LoadableValue      = 51,                // used for 'KL' and qldc operands
  74     CONSTANT_AnyMember          = 52,                // union of refs to field or (interface) method
  75     CONSTANT_FieldSpecific      = 53,                // used only for 'KQ' ConstantValue attrs
  76     CONSTANT_GroupFirst         = CONSTANT_All,      // start group marker
  77     CONSTANT_GroupLimit         = 54,                // end group marker
  78 
  79     // CONSTANT_MethodHandle reference kinds
  80     REF_getField         = 1,
  81     REF_getStatic        = 2,
  82     REF_putField         = 3,
  83     REF_putStatic        = 4,
  84     REF_invokeVirtual    = 5,
  85     REF_invokeStatic     = 6,
  86     REF_invokeSpecial    = 7,
  87     REF_newInvokeSpecial = 8,
  88     REF_invokeInterface  = 9,
  89 
  90     SUBINDEX_BIT = 64,  // combined with CONSTANT_xxx for ixTag
  91 
  92     ACC_STATIC       = 0x0008,
  93     ACC_IC_LONG_FORM = (1<<16), //for ic_flags
  94 
  95     CLASS_ATTR_SourceFile                            = 17,
  96     CLASS_ATTR_EnclosingMethod                       = 18,
  97     CLASS_ATTR_InnerClasses                          = 23,
  98     CLASS_ATTR_ClassFile_version                     = 24,
  99     CLASS_ATTR_BootstrapMethods                      = 25,
 100     FIELD_ATTR_ConstantValue                         = 17,
 101     METHOD_ATTR_Code                                 = 17,
 102     METHOD_ATTR_Exceptions                           = 18,
 103     METHOD_ATTR_RuntimeVisibleParameterAnnotations   = 23,
 104     METHOD_ATTR_RuntimeInvisibleParameterAnnotations = 24,
 105     METHOD_ATTR_AnnotationDefault                    = 25,
 106     METHOD_ATTR_MethodParameters                     = 26,
 107     CODE_ATTR_StackMapTable          = 0,
 108     CODE_ATTR_LineNumberTable        = 1,
 109     CODE_ATTR_LocalVariableTable     = 2,
 110     CODE_ATTR_LocalVariableTypeTable = 3,
 111     //X_ATTR_Synthetic = 12,  // ACC_SYNTHETIC; not predefined
 112     X_ATTR_Signature                   = 19,
 113     X_ATTR_Deprecated                  = 20,
 114     X_ATTR_RuntimeVisibleAnnotations   = 21,
 115     X_ATTR_RuntimeInvisibleAnnotations = 22,
 116     X_ATTR_RuntimeVisibleTypeAnnotations   = 27,
 117     X_ATTR_RuntimeInvisibleTypeAnnotations = 28,
 118     X_ATTR_OVERFLOW                    = 16,
 119     X_ATTR_LIMIT_NO_FLAGS_HI           = 32,
 120     X_ATTR_LIMIT_FLAGS_HI              = 63,
 121 
 122 #define O_ATTR_DO(F) \
 123         F(X_ATTR_OVERFLOW,01) \
 124           /*(end)*/
 125 #define X_ATTR_DO(F) \
 126         O_ATTR_DO(F) \
 127         F(X_ATTR_Signature,Signature) \
 128         F(X_ATTR_Deprecated,Deprecated) \
 129         F(X_ATTR_RuntimeVisibleAnnotations,RuntimeVisibleAnnotations) \
 130         F(X_ATTR_RuntimeInvisibleAnnotations,RuntimeInvisibleAnnotations) \
 131         F(X_ATTR_RuntimeVisibleTypeAnnotations,RuntimeVisibleTypeAnnotations) \
 132         F(X_ATTR_RuntimeInvisibleTypeAnnotations,RuntimeInvisibleTypeAnnotations) \
 133         /*F(X_ATTR_Synthetic,Synthetic)*/ \
 134           /*(end)*/
 135 #define CLASS_ATTR_DO(F) \
 136         F(CLASS_ATTR_SourceFile,SourceFile) \
 137         F(CLASS_ATTR_InnerClasses,InnerClasses) \
 138         F(CLASS_ATTR_EnclosingMethod,EnclosingMethod) \
 139         F(CLASS_ATTR_ClassFile_version,02) \
 140         F(CLASS_ATTR_BootstrapMethods,BootstrapMethods) \
 141           /*(end)*/
 142 #define FIELD_ATTR_DO(F) \
 143         F(FIELD_ATTR_ConstantValue,ConstantValue) \
 144           /*(end)*/
 145 #define METHOD_ATTR_DO(F) \
 146         F(METHOD_ATTR_Code,Code) \
 147         F(METHOD_ATTR_Exceptions,Exceptions) \
 148         F(METHOD_ATTR_RuntimeVisibleParameterAnnotations,RuntimeVisibleParameterAnnotations) \
 149         F(METHOD_ATTR_RuntimeInvisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations) \
 150         F(METHOD_ATTR_AnnotationDefault,AnnotationDefault) \
 151         F(METHOD_ATTR_MethodParameters,MethodParameters) \
 152           /*(end)*/
 153 #define CODE_ATTR_DO(F) \
 154         F(CODE_ATTR_StackMapTable,StackMapTable) \
 155         F(CODE_ATTR_LineNumberTable,LineNumberTable) \
 156         F(CODE_ATTR_LocalVariableTable,LocalVariableTable) \
 157         F(CODE_ATTR_LocalVariableTypeTable,LocalVariableTypeTable) \
 158           /*(end)*/
 159 #define ALL_ATTR_DO(F) \
 160         X_ATTR_DO(F) \
 161         CLASS_ATTR_DO(F) \
 162         FIELD_ATTR_DO(F) \
 163         METHOD_ATTR_DO(F) \
 164         CODE_ATTR_DO(F) \
 165           /*(end)*/
 166 
 167     // attribute "context types"
 168     ATTR_CONTEXT_CLASS  = 0,
 169     ATTR_CONTEXT_FIELD  = 1,
 170     ATTR_CONTEXT_METHOD = 2,
 171     ATTR_CONTEXT_CODE   = 3,
 172     ATTR_CONTEXT_LIMIT  = 4,
 173 
 174     // constants for parsed layouts (stored in band::le_kind)
 175     EK_NONE = 0,     // not a layout element
 176     EK_INT  = 'I',   // B H I SH etc., also FH etc.
 177     EK_BCI  = 'P',   // PH etc.
 178     EK_BCID = 'Q',   // POH etc.
 179     EK_BCO  = 'O',   // OH etc.
 180     EK_REPL = 'N',   // NH[...] etc.
 181     EK_REF  = 'R',   // RUH, RUNH, KQH, etc.
 182     EK_UN   = 'T',   // TB(...)[...] etc.
 183     EK_CASE = 'K',   // (...)[...] etc.
 184     EK_CALL = '(',   // (0), (1), etc.
 185     EK_CBLE = '[',   // [...][...] etc.
 186     NO_BAND_INDEX = -1,
 187 
 188     // File option bits, from LSB in ascending bit position.
 189     FO_DEFLATE_HINT           = 1<<0,
 190     FO_IS_CLASS_STUB          = 1<<1,
 191 
 192     // Archive option bits, from LSB in ascending bit position:
 193     AO_HAVE_SPECIAL_FORMATS   = 1<<0,
 194     AO_HAVE_CP_NUMBERS        = 1<<1,
 195     AO_HAVE_ALL_CODE_FLAGS    = 1<<2,
 196     AO_HAVE_CP_EXTRAS         = 1<<3,
 197     AO_HAVE_FILE_HEADERS      = 1<<4,
 198     AO_DEFLATE_HINT           = 1<<5,
 199     AO_HAVE_FILE_MODTIME      = 1<<6,
 200     AO_HAVE_FILE_OPTIONS      = 1<<7,
 201     AO_HAVE_FILE_SIZE_HI      = 1<<8,
 202     AO_HAVE_CLASS_FLAGS_HI    = 1<<9,
 203     AO_HAVE_FIELD_FLAGS_HI    = 1<<10,
 204     AO_HAVE_METHOD_FLAGS_HI   = 1<<11,
 205     AO_HAVE_CODE_FLAGS_HI     = 1<<12,
 206     AO_UNUSED_MBZ             = (-1)<<13, // options bits reserved for future use.
 207 
 208 #define ARCHIVE_BIT_DO(F) \
 209          F(AO_HAVE_SPECIAL_FORMATS) \
 210          F(AO_HAVE_CP_NUMBERS) \
 211          F(AO_HAVE_ALL_CODE_FLAGS) \
 212          F(AO_HAVE_CP_EXTRAS) \
 213          F(AO_HAVE_FILE_HEADERS) \
 214          F(AO_DEFLATE_HINT) \
 215          F(AO_HAVE_FILE_MODTIME) \
 216          F(AO_HAVE_FILE_OPTIONS) \
 217          F(AO_HAVE_FILE_SIZE_HI) \
 218          F(AO_HAVE_CLASS_FLAGS_HI) \
 219          F(AO_HAVE_FIELD_FLAGS_HI) \
 220          F(AO_HAVE_METHOD_FLAGS_HI) \
 221          F(AO_HAVE_CODE_FLAGS_HI) \
 222           /*(end)*/
 223 
 224     // Constants for decoding attribute definition header bytes.
 225     ADH_CONTEXT_MASK   = 0x3,  // (hdr & ADH_CONTEXT_MASK)
 226     ADH_BIT_SHIFT      = 0x2,  // (hdr >> ADH_BIT_SHIFT)
 227     ADH_BIT_IS_LSB     = 1,    // (hdr >> ADH_BIT_SHIFT) - ADH_BIT_IS_LSB
 228 #define ADH_BYTE(context, index) \
 229         ((((index) + ADH_BIT_IS_LSB)<<ADH_BIT_SHIFT) + (context))
 230 #define ADH_BYTE_CONTEXT(adhb) \
 231         ((adhb) & ADH_CONTEXT_MASK)
 232 #define ADH_BYTE_INDEX(adhb) \
 233         (((adhb) >> ADH_BIT_SHIFT) - ADH_BIT_IS_LSB)
 234 
 235     NO_MODTIME = 0,  // null modtime value
 236 
 237     // meta-coding
 238     _meta_default   = 0,
 239     _meta_canon_min = 1,
 240     _meta_canon_max = 115,
 241     _meta_arb       = 116,
 242     _meta_run       = 117,
 243     _meta_pop       = 141,
 244     _meta_limit     = 189,
 245     _meta_error     = 255,
 246 
 247     _xxx_1_end
 248 };
 249 
 250 // Bytecodes.
 251 
 252 enum {
 253   bc_nop                  =   0, // 0x00
 254   bc_aconst_null          =   1, // 0x01
 255   bc_iconst_m1            =   2, // 0x02
 256   bc_iconst_0             =   3, // 0x03
 257   bc_iconst_1             =   4, // 0x04
 258   bc_iconst_2             =   5, // 0x05
 259   bc_iconst_3             =   6, // 0x06
 260   bc_iconst_4             =   7, // 0x07
 261   bc_iconst_5             =   8, // 0x08
 262   bc_lconst_0             =   9, // 0x09
 263   bc_lconst_1             =  10, // 0x0a
 264   bc_fconst_0             =  11, // 0x0b
 265   bc_fconst_1             =  12, // 0x0c
 266   bc_fconst_2             =  13, // 0x0d
 267   bc_dconst_0             =  14, // 0x0e
 268   bc_dconst_1             =  15, // 0x0f
 269   bc_bipush               =  16, // 0x10
 270   bc_sipush               =  17, // 0x11
 271   bc_ldc                  =  18, // 0x12
 272   bc_ldc_w                =  19, // 0x13
 273   bc_ldc2_w               =  20, // 0x14
 274   bc_iload                =  21, // 0x15
 275   bc_lload                =  22, // 0x16
 276   bc_fload                =  23, // 0x17
 277   bc_dload                =  24, // 0x18
 278   bc_aload                =  25, // 0x19
 279   bc_iload_0              =  26, // 0x1a
 280   bc_iload_1              =  27, // 0x1b
 281   bc_iload_2              =  28, // 0x1c
 282   bc_iload_3              =  29, // 0x1d
 283   bc_lload_0              =  30, // 0x1e
 284   bc_lload_1              =  31, // 0x1f
 285   bc_lload_2              =  32, // 0x20
 286   bc_lload_3              =  33, // 0x21
 287   bc_fload_0              =  34, // 0x22
 288   bc_fload_1              =  35, // 0x23
 289   bc_fload_2              =  36, // 0x24
 290   bc_fload_3              =  37, // 0x25
 291   bc_dload_0              =  38, // 0x26
 292   bc_dload_1              =  39, // 0x27
 293   bc_dload_2              =  40, // 0x28
 294   bc_dload_3              =  41, // 0x29
 295   bc_aload_0              =  42, // 0x2a
 296   bc_aload_1              =  43, // 0x2b
 297   bc_aload_2              =  44, // 0x2c
 298   bc_aload_3              =  45, // 0x2d
 299   bc_iaload               =  46, // 0x2e
 300   bc_laload               =  47, // 0x2f
 301   bc_faload               =  48, // 0x30
 302   bc_daload               =  49, // 0x31
 303   bc_aaload               =  50, // 0x32
 304   bc_baload               =  51, // 0x33
 305   bc_caload               =  52, // 0x34
 306   bc_saload               =  53, // 0x35
 307   bc_istore               =  54, // 0x36
 308   bc_lstore               =  55, // 0x37
 309   bc_fstore               =  56, // 0x38
 310   bc_dstore               =  57, // 0x39
 311   bc_astore               =  58, // 0x3a
 312   bc_istore_0             =  59, // 0x3b
 313   bc_istore_1             =  60, // 0x3c
 314   bc_istore_2             =  61, // 0x3d
 315   bc_istore_3             =  62, // 0x3e
 316   bc_lstore_0             =  63, // 0x3f
 317   bc_lstore_1             =  64, // 0x40
 318   bc_lstore_2             =  65, // 0x41
 319   bc_lstore_3             =  66, // 0x42
 320   bc_fstore_0             =  67, // 0x43
 321   bc_fstore_1             =  68, // 0x44
 322   bc_fstore_2             =  69, // 0x45
 323   bc_fstore_3             =  70, // 0x46
 324   bc_dstore_0             =  71, // 0x47
 325   bc_dstore_1             =  72, // 0x48
 326   bc_dstore_2             =  73, // 0x49
 327   bc_dstore_3             =  74, // 0x4a
 328   bc_astore_0             =  75, // 0x4b
 329   bc_astore_1             =  76, // 0x4c
 330   bc_astore_2             =  77, // 0x4d
 331   bc_astore_3             =  78, // 0x4e
 332   bc_iastore              =  79, // 0x4f
 333   bc_lastore              =  80, // 0x50
 334   bc_fastore              =  81, // 0x51
 335   bc_dastore              =  82, // 0x52
 336   bc_aastore              =  83, // 0x53
 337   bc_bastore              =  84, // 0x54
 338   bc_castore              =  85, // 0x55
 339   bc_sastore              =  86, // 0x56
 340   bc_pop                  =  87, // 0x57
 341   bc_pop2                 =  88, // 0x58
 342   bc_dup                  =  89, // 0x59
 343   bc_dup_x1               =  90, // 0x5a
 344   bc_dup_x2               =  91, // 0x5b
 345   bc_dup2                 =  92, // 0x5c
 346   bc_dup2_x1              =  93, // 0x5d
 347   bc_dup2_x2              =  94, // 0x5e
 348   bc_swap                 =  95, // 0x5f
 349   bc_iadd                 =  96, // 0x60
 350   bc_ladd                 =  97, // 0x61
 351   bc_fadd                 =  98, // 0x62
 352   bc_dadd                 =  99, // 0x63
 353   bc_isub                 = 100, // 0x64
 354   bc_lsub                 = 101, // 0x65
 355   bc_fsub                 = 102, // 0x66
 356   bc_dsub                 = 103, // 0x67
 357   bc_imul                 = 104, // 0x68
 358   bc_lmul                 = 105, // 0x69
 359   bc_fmul                 = 106, // 0x6a
 360   bc_dmul                 = 107, // 0x6b
 361   bc_idiv                 = 108, // 0x6c
 362   bc_ldiv                 = 109, // 0x6d
 363   bc_fdiv                 = 110, // 0x6e
 364   bc_ddiv                 = 111, // 0x6f
 365   bc_irem                 = 112, // 0x70
 366   bc_lrem                 = 113, // 0x71
 367   bc_frem                 = 114, // 0x72
 368   bc_drem                 = 115, // 0x73
 369   bc_ineg                 = 116, // 0x74
 370   bc_lneg                 = 117, // 0x75
 371   bc_fneg                 = 118, // 0x76
 372   bc_dneg                 = 119, // 0x77
 373   bc_ishl                 = 120, // 0x78
 374   bc_lshl                 = 121, // 0x79
 375   bc_ishr                 = 122, // 0x7a
 376   bc_lshr                 = 123, // 0x7b
 377   bc_iushr                = 124, // 0x7c
 378   bc_lushr                = 125, // 0x7d
 379   bc_iand                 = 126, // 0x7e
 380   bc_land                 = 127, // 0x7f
 381   bc_ior                  = 128, // 0x80
 382   bc_lor                  = 129, // 0x81
 383   bc_ixor                 = 130, // 0x82
 384   bc_lxor                 = 131, // 0x83
 385   bc_iinc                 = 132, // 0x84
 386   bc_i2l                  = 133, // 0x85
 387   bc_i2f                  = 134, // 0x86
 388   bc_i2d                  = 135, // 0x87
 389   bc_l2i                  = 136, // 0x88
 390   bc_l2f                  = 137, // 0x89
 391   bc_l2d                  = 138, // 0x8a
 392   bc_f2i                  = 139, // 0x8b
 393   bc_f2l                  = 140, // 0x8c
 394   bc_f2d                  = 141, // 0x8d
 395   bc_d2i                  = 142, // 0x8e
 396   bc_d2l                  = 143, // 0x8f
 397   bc_d2f                  = 144, // 0x90
 398   bc_i2b                  = 145, // 0x91
 399   bc_i2c                  = 146, // 0x92
 400   bc_i2s                  = 147, // 0x93
 401   bc_lcmp                 = 148, // 0x94
 402   bc_fcmpl                = 149, // 0x95
 403   bc_fcmpg                = 150, // 0x96
 404   bc_dcmpl                = 151, // 0x97
 405   bc_dcmpg                = 152, // 0x98
 406   bc_ifeq                 = 153, // 0x99
 407   bc_ifne                 = 154, // 0x9a
 408   bc_iflt                 = 155, // 0x9b
 409   bc_ifge                 = 156, // 0x9c
 410   bc_ifgt                 = 157, // 0x9d
 411   bc_ifle                 = 158, // 0x9e
 412   bc_if_icmpeq            = 159, // 0x9f
 413   bc_if_icmpne            = 160, // 0xa0
 414   bc_if_icmplt            = 161, // 0xa1
 415   bc_if_icmpge            = 162, // 0xa2
 416   bc_if_icmpgt            = 163, // 0xa3
 417   bc_if_icmple            = 164, // 0xa4
 418   bc_if_acmpeq            = 165, // 0xa5
 419   bc_if_acmpne            = 166, // 0xa6
 420   bc_goto                 = 167, // 0xa7
 421   bc_jsr                  = 168, // 0xa8
 422   bc_ret                  = 169, // 0xa9
 423   bc_tableswitch          = 170, // 0xaa
 424   bc_lookupswitch         = 171, // 0xab
 425   bc_ireturn              = 172, // 0xac
 426   bc_lreturn              = 173, // 0xad
 427   bc_freturn              = 174, // 0xae
 428   bc_dreturn              = 175, // 0xaf
 429   bc_areturn              = 176, // 0xb0
 430   bc_return               = 177, // 0xb1
 431   bc_getstatic            = 178, // 0xb2
 432   bc_putstatic            = 179, // 0xb3
 433   bc_getfield             = 180, // 0xb4
 434   bc_putfield             = 181, // 0xb5
 435   bc_invokevirtual        = 182, // 0xb6
 436   bc_invokespecial        = 183, // 0xb7
 437   bc_invokestatic         = 184, // 0xb8
 438   bc_invokeinterface      = 185, // 0xb9
 439   bc_invokedynamic        = 186, // 0xba
 440   bc_new                  = 187, // 0xbb
 441   bc_newarray             = 188, // 0xbc
 442   bc_anewarray            = 189, // 0xbd
 443   bc_arraylength          = 190, // 0xbe
 444   bc_athrow               = 191, // 0xbf
 445   bc_checkcast            = 192, // 0xc0
 446   bc_instanceof           = 193, // 0xc1
 447   bc_monitorenter         = 194, // 0xc2
 448   bc_monitorexit          = 195, // 0xc3
 449   bc_wide                 = 196, // 0xc4
 450   bc_multianewarray       = 197, // 0xc5
 451   bc_ifnull               = 198, // 0xc6
 452   bc_ifnonnull            = 199, // 0xc7
 453   bc_goto_w               = 200, // 0xc8
 454   bc_jsr_w                = 201, // 0xc9
 455   bc_bytecode_limit       = 202  // 0xca
 456 };
 457 
 458 enum {
 459   bc_end_marker = 255,
 460   bc_byte_escape = 254,
 461   bc_ref_escape = 253,
 462 
 463   _first_linker_op = bc_getstatic,
 464   _last_linker_op  = bc_invokestatic,
 465   _num_linker_ops  = (_last_linker_op - _first_linker_op) + 1,
 466   _self_linker_op  = bc_bytecode_limit,
 467   _self_linker_aload_flag = 1*_num_linker_ops,
 468   _self_linker_super_flag = 2*_num_linker_ops,
 469   _self_linker_limit = _self_linker_op + 4*_num_linker_ops,
 470 
 471   _invokeinit_op = _self_linker_limit,
 472   _invokeinit_self_option = 0,
 473   _invokeinit_super_option = 1,
 474   _invokeinit_new_option = 2,
 475   _invokeinit_limit = _invokeinit_op+3,
 476 
 477   _xldc_op = _invokeinit_limit,
 478   bc_sldc = bc_ldc,      // previously named bc_aldc
 479   bc_cldc = _xldc_op+0,
 480   bc_ildc = _xldc_op+1,
 481   bc_fldc = _xldc_op+2,
 482   bc_sldc_w = bc_ldc_w,  // previously named bc_aldc_w
 483   bc_cldc_w = _xldc_op+3,
 484   bc_ildc_w = _xldc_op+4,
 485   bc_fldc_w = _xldc_op+5,
 486   bc_lldc2_w = bc_ldc2_w,
 487   bc_dldc2_w = _xldc_op+6,
 488   // anything other primitive, string, or class must be handled with qldc:
 489   bc_qldc    = _xldc_op+7,
 490   bc_qldc_w  = _xldc_op+8,
 491   _xldc_limit = _xldc_op+9,
 492   _invoke_int_op = _xldc_limit,
 493   _invokespecial_int = _invoke_int_op+0,
 494   _invokestatic_int = _invoke_int_op+1,
 495   _invoke_int_limit =  _invoke_int_op+2,
 496   _xxx_3_end
 497 };