/* NSC -- new Scala compiler * Copyright 2005-2009 LAMP/EPFL * @author Martin Odersky */ // $Id: ClassfileConstants.scala 18387 2009-07-24 15:28:37Z odersky $ package scala.tools.nsc package symtab package classfile object ClassfileConstants { final val JAVA_MAGIC = 0xCAFEBABE final val JAVA_MAJOR_VERSION = 45 final val JAVA_MINOR_VERSION = 3 /** <p> * (see http://java.sun.com/docs/books/jvms/second_edition/jvms-clarify.html) * </p> * <p> * If the <code>ACC_INTERFACE</code> flag is set, the <code>ACC_ABSTRACT</code> * flag must also be set (ch. 2.13.1). * </p> * <p> * A class file cannot have both its <code>ACC_FINAL</code> and * <code>ACC_ABSTRACT</code> flags set (ch. 2.8.2). * </p> * <p> * A field may have at most one of its <code>ACC_PRIVATE</code>, * <code>ACC_PROTECTED</code>, <code>ACC_PUBLIC</code> flags set (ch. 2.7.4). * </p> * <p> * A field may not have both its <code>ACC_FINAL</code> and * <code>ACC_VOLATILE</code> flags set (ch. 2.9.1). * </p> * <p> * If a method has its <code>ACC_ABSTRACT</code> flag set it must not * have any of its <code>ACC_FINAL</code>, <code>ACC_NATIVE</code>, * <code>ACC_PRIVATE</code>, <code>ACC_STATIC</code>, <code>ACC_STRICT</code>, * or <code>ACC_SYNCHRONIZED</code> flags set (ch. 2.13.3.2). * </p> * <p> * All interface methods must have their <code>ACC_ABSTRACT</code> and * <code>ACC_PUBLIC</code> flags set. * </p> */ // Class Field Method final val JAVA_ACC_PUBLIC = 0x0001 // X X X final val JAVA_ACC_PRIVATE = 0x0002 // X X final val JAVA_ACC_PROTECTED = 0x0004 // X X final val JAVA_ACC_STATIC = 0x0008 // X X final val JAVA_ACC_FINAL = 0x0010 // X X X final val JAVA_ACC_SUPER = 0x0020 // X final val JAVA_ACC_SYNCHRONIZED = 0x0020 // X final val JAVA_ACC_VOLATILE = 0x0040 // X final val JAVA_ACC_BRIDGE = 0x0040 // X final val JAVA_ACC_TRANSIENT = 0x0080 // X final val JAVA_ACC_VARARGS = 0x0080 // X final val JAVA_ACC_NATIVE = 0x0100 // X final val JAVA_ACC_INTERFACE = 0x0200 // X final val JAVA_ACC_ABSTRACT = 0x0400 // X X final val JAVA_ACC_STRICT = 0x0800 // X final val JAVA_ACC_SYNTHETIC = 0x1000 // X X X final val JAVA_ACC_ANNOTATION = 0x2000 // X final val JAVA_ACC_ENUM = 0x4000 // X X // tags describing the type of a literal in the constant pool final val CONSTANT_UTF8 = 1 final val CONSTANT_UNICODE = 2 final val CONSTANT_INTEGER = 3 final val CONSTANT_FLOAT = 4 final val CONSTANT_LONG = 5 final val CONSTANT_DOUBLE = 6 final val CONSTANT_CLASS = 7 final val CONSTANT_STRING = 8 final val CONSTANT_FIELDREF = 9 final val CONSTANT_METHODREF = 10 final val CONSTANT_INTFMETHODREF = 11 final val CONSTANT_NAMEANDTYPE = 12 // tags desribing the type of a literal in attribute values final val BYTE_TAG = 'B' final val CHAR_TAG = 'C' final val DOUBLE_TAG = 'D' final val FLOAT_TAG = 'F' final val INT_TAG = 'I' final val LONG_TAG = 'J' final val SHORT_TAG = 'S' final val BOOL_TAG = 'Z' final val STRING_TAG = 's' final val ENUM_TAG = 'e' final val CLASS_TAG = 'c' final val ARRAY_TAG = '[' final val VOID_TAG = 'V' final val TVAR_TAG = 'T' final val ANNOTATION_TAG = '@' final val SCALA_NOTHING = "scala.runtime.Nothing$" final val SCALA_NULL = "scala.runtime.Null$" // tags describing the type of newarray final val T_BOOLEAN = 4 final val T_CHAR = 5 final val T_FLOAT = 6 final val T_DOUBLE = 7 final val T_BYTE = 8 final val T_SHORT = 9 final val T_INT = 10 final val T_LONG = 11 // JVM mnemonics final val nop = 0x00 final val aconst_null = 0x01 final val iconst_m1 = 0x02 final val iconst_0 = 0x03 final val iconst_1 = 0x04 final val iconst_2 = 0x05 final val iconst_3 = 0x06 final val iconst_4 = 0x07 final val iconst_5 = 0x08 final val lconst_0 = 0x09 final val lconst_1 = 0x0a final val fconst_0 = 0x0b final val fconst_1 = 0x0c final val fconst_2 = 0x0d final val dconst_0 = 0x0e final val dconst_1 = 0x0f final val bipush = 0x10 final val sipush = 0x11 final val ldc = 0x12 final val ldc_w = 0x13 final val ldc2_w = 0x14 final val iload = 0x15 final val lload = 0x16 final val fload = 0x17 final val dload = 0x18 final val aload = 0x19 final val iload_0 = 0x1a final val iload_1 = 0x1b final val iload_2 = 0x1c final val iload_3 = 0x1d final val lload_0 = 0x1e final val lload_1 = 0x1f final val lload_2 = 0x20 final val lload_3 = 0x21 final val fload_0 = 0x22 final val fload_1 = 0x23 final val fload_2 = 0x24 final val fload_3 = 0x25 final val dload_0 = 0x26 final val dload_1 = 0x27 final val dload_2 = 0x28 final val dload_3 = 0x29 final val aload_0 = 0x2a final val aload_1 = 0x2b final val aload_2 = 0x2c final val aload_3 = 0x2d final val iaload = 0x2e final val laload = 0x2f final val faload = 0x30 final val daload = 0x31 final val aaload = 0x32 final val baload = 0x33 final val caload = 0x34 final val saload = 0x35 final val istore = 0x36 final val lstore = 0x37 final val fstore = 0x38 final val dstore = 0x39 final val astore = 0x3a final val istore_0 = 0x3b final val istore_1 = 0x3c final val istore_2 = 0x3d final val istore_3 = 0x3e final val lstore_0 = 0x3f final val lstore_1 = 0x40 final val lstore_2 = 0x41 final val lstore_3 = 0x42 final val fstore_0 = 0x43 final val fstore_1 = 0x44 final val fstore_2 = 0x45 final val fstore_3 = 0x46 final val dstore_0 = 0x47 final val dstore_1 = 0x48 final val dstore_2 = 0x49 final val dstore_3 = 0x4a final val astore_0 = 0x4b final val astore_1 = 0x4c final val astore_2 = 0x4d final val astore_3 = 0x4e final val iastore = 0x4f final val lastore = 0x50 final val fastore = 0x51 final val dastore = 0x52 final val aastore = 0x53 final val bastore = 0x54 final val castore = 0x55 final val sastore = 0x56 final val pop = 0x57 final val pop2 = 0x58 final val dup = 0x59 final val dup_x1 = 0x5a final val dup_x2 = 0x5b final val dup2 = 0x5c final val dup2_x1 = 0x5d final val dup2_x2 = 0x5e final val swap = 0x5f final val iadd = 0x60 final val ladd = 0x61 final val fadd = 0x62 final val dadd = 0x63 final val isub = 0x64 final val lsub = 0x65 final val fsub = 0x66 final val dsub = 0x67 final val imul = 0x68 final val lmul = 0x69 final val fmul = 0x6a final val dmul = 0x6b final val idiv = 0x6c final val ldiv = 0x6d final val fdiv = 0x6e final val ddiv = 0x6f final val irem = 0x70 final val lrem = 0x71 final val frem = 0x72 final val drem = 0x73 final val ineg = 0x74 final val lneg = 0x75 final val fneg = 0x76 final val dneg = 0x77 final val ishl = 0x78 final val lshl = 0x79 final val ishr = 0x7a final val lshr = 0x7b final val iushr = 0x7c final val lushr = 0x7d final val iand = 0x7e final val land = 0x7f final val ior = 0x80 final val lor = 0x81 final val ixor = 0x82 final val lxor = 0x83 final val iinc = 0x84 final val i2l = 0x85 final val i2f = 0x86 final val i2d = 0x87 final val l2i = 0x88 final val l2f = 0x89 final val l2d = 0x8a final val f2i = 0x8b final val f2l = 0x8c final val f2d = 0x8d final val d2i = 0x8e final val d2l = 0x8f final val d2f = 0x90 final val i2b = 0x91 final val i2c = 0x92 final val i2s = 0x93 final val lcmp = 0x94 final val fcmpl = 0x95 final val fcmpg = 0x96 final val dcmpl = 0x97 final val dcmpg = 0x98 final val ifeq = 0x99 final val ifne = 0x9a final val iflt = 0x9b final val ifge = 0x9c final val ifgt = 0x9d final val ifle = 0x9e final val if_icmpeq = 0x9f final val if_icmpne = 0xa0 final val if_icmplt = 0xa1 final val if_icmpge = 0xa2 final val if_icmpgt = 0xa3 final val if_icmple = 0xa4 final val if_acmpeq = 0xa5 final val if_acmpne = 0xa6 final val goto = 0xa7 final val jsr = 0xa8 final val ret = 0xa9 final val tableswitch = 0xaa final val lookupswitch = 0xab final val ireturn = 0xac final val lreturn = 0xad final val freturn = 0xae final val dreturn = 0xaf final val areturn = 0xb0 final val return_ = 0xb1 final val getstatic = 0xb2 final val putstatic = 0xb3 final val getfield = 0xb4 final val putfield = 0xb5 final val invokevirtual = 0xb6 final val invokespecial = 0xb7 final val invokestatic = 0xb8 final val invokeinterface = 0xb9 final val xxxunusedxxxx = 0xba final val new_ = 0xbb final val newarray = 0xbc final val anewarray = 0xbd final val arraylength = 0xbe final val athrow = 0xbf final val checkcast = 0xc0 final val instanceof = 0xc1 final val monitorenter = 0xc2 final val monitorexit = 0xc3 final val wide = 0xc4 final val multianewarray = 0xc5 final val ifnull = 0xc6 final val ifnonnull = 0xc7 final val goto_w = 0xc8 final val jsr_w = 0xc9 // reserved opcodes final val breakpoint = 0xca final val impdep1 = 0xfe final val impdep2 = 0xff }