/*
 * Copyright (c) 2002,2006 IBM Corporation.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 */
package com.ibm.wala.shrikeBT;

/**
 * This interface defines a bunch of constants from the JVM spec. It also defines some constants we need for other purposes.
 * 
 * Here are the JVM constants:
 * <ul>
 * <li>The OP_ constants define the JVM instruction opcodes.
 * <li>The ACC_ constants define the accessibility flags for classes, fields and methods.
 * <li>The CONSTANT_ constants define the constant pool item types.
 * <li>The T_ constants define the types of arrays that can be created by OP_newarray.
 * <li>The TYPE_ constants define the string representations of various JVM types. Two special non-JVM types are defined, TYPE_null
 * and TYPE_unknown, as noted below.
 * </ul>
 * 
 * Non-JVM constants:
 * <ul>
 * <li>The OPR_ constants define the set of operators present in JVM instructions.
 * <li>The operatorNames array gives the string names of those operators.
 * <li>The TYPE_..._index constants define numeric representations of the JVM base types.
 * <li>The indexedTypes array maps those numeric representations to their official string representations.
 * <li>The indexedTypes_T array maps those numeric representations to the corresponding T_ constant.
 * </ul>
 */
public interface Constants {

  public static final short OP_nop = 0;

  public static final short OP_aconst_null = 1;

  public static final short OP_iconst_m1 = 2;

  public static final short OP_iconst_0 = 3;

  public static final short OP_iconst_1 = 4;

  public static final short OP_iconst_2 = 5;

  public static final short OP_iconst_3 = 6;

  public static final short OP_iconst_4 = 7;

  public static final short OP_iconst_5 = 8;

  public static final short OP_lconst_0 = 9;

  public static final short OP_lconst_1 = 10;

  public static final short OP_fconst_0 = 11;

  public static final short OP_fconst_1 = 12;

  public static final short OP_fconst_2 = 13;

  public static final short OP_dconst_0 = 14;

  public static final short OP_dconst_1 = 15;

  public static final short OP_bipush = 16;

  public static final short OP_sipush = 17;

  public static final short OP_ldc = 18;

  public static final short OP_ldc_w = 19;

  public static final short OP_ldc2_w = 20;

  public static final short OP_iload = 21;

  public static final short OP_lload = 22;

  public static final short OP_fload = 23;

  public static final short OP_dload = 24;

  public static final short OP_aload = 25;

  public static final short OP_iload_0 = 26;

  public static final short OP_iload_1 = 27;

  public static final short OP_iload_2 = 28;

  public static final short OP_iload_3 = 29;

  public static final short OP_lload_0 = 30;

  public static final short OP_lload_1 = 31;

  public static final short OP_lload_2 = 32;

  public static final short OP_lload_3 = 33;

  public static final short OP_fload_0 = 34;

  public static final short OP_fload_1 = 35;

  public static final short OP_fload_2 = 36;

  public static final short OP_fload_3 = 37;

  public static final short OP_dload_0 = 38;

  public static final short OP_dload_1 = 39;

  public static final short OP_dload_2 = 40;

  public static final short OP_dload_3 = 41;

  public static final short OP_aload_0 = 42;

  public static final short OP_aload_1 = 43;

  public static final short OP_aload_2 = 44;

  public static final short OP_aload_3 = 45;

  public static final short OP_iaload = 46;

  public static final short OP_laload = 47;

  public static final short OP_faload = 48;

  public static final short OP_daload = 49;

  public static final short OP_aaload = 50;

  public static final short OP_baload = 51;

  public static final short OP_caload = 52;

  public static final short OP_saload = 53;

  public static final short OP_istore = 54;

  public static final short OP_lstore = 55;

  public static final short OP_fstore = 56;

  public static final short OP_dstore = 57;

  public static final short OP_astore = 58;

  public static final short OP_istore_0 = 59;

  public static final short OP_istore_1 = 60;

  public static final short OP_istore_2 = 61;

  public static final short OP_istore_3 = 62;

  public static final short OP_lstore_0 = 63;

  public static final short OP_lstore_1 = 64;

  public static final short OP_lstore_2 = 65;

  public static final short OP_lstore_3 = 66;

  public static final short OP_fstore_0 = 67;

  public static final short OP_fstore_1 = 68;

  public static final short OP_fstore_2 = 69;

  public static final short OP_fstore_3 = 70;

  public static final short OP_dstore_0 = 71;

  public static final short OP_dstore_1 = 72;

  public static final short OP_dstore_2 = 73;

  public static final short OP_dstore_3 = 74;

  public static final short OP_astore_0 = 75;

  public static final short OP_astore_1 = 76;

  public static final short OP_astore_2 = 77;

  public static final short OP_astore_3 = 78;

  public static final short OP_iastore = 79;

  public static final short OP_lastore = 80;

  public static final short OP_fastore = 81;

  public static final short OP_dastore = 82;

  public static final short OP_aastore = 83;

  public static final short OP_bastore = 84;

  public static final short OP_castore = 85;

  public static final short OP_sastore = 86;

  public static final short OP_pop = 87;

  public static final short OP_pop2 = 88;

  public static final short OP_dup = 89;

  public static final short OP_dup_x1 = 90;

  public static final short OP_dup_x2 = 91;

  public static final short OP_dup2 = 92;

  public static final short OP_dup2_x1 = 93;

  public static final short OP_dup2_x2 = 94;

  public static final short OP_swap = 95;

  public static final short OP_iadd = 96;

  public static final short OP_ladd = 97;

  public static final short OP_fadd = 98;

  public static final short OP_dadd = 99;

  public static final short OP_isub = 100;

  public static final short OP_lsub = 101;

  public static final short OP_fsub = 102;

  public static final short OP_dsub = 103;

  public static final short OP_imul = 104;

  public static final short OP_lmul = 105;

  public static final short OP_fmul = 106;

  public static final short OP_dmul = 107;

  public static final short OP_idiv = 108;

  public static final short OP_ldiv = 109;

  public static final short OP_fdiv = 110;

  public static final short OP_ddiv = 111;

  public static final short OP_irem = 112;

  public static final short OP_lrem = 113;

  public static final short OP_frem = 114;

  public static final short OP_drem = 115;

  public static final short OP_ineg = 116;

  public static final short OP_lneg = 117;

  public static final short OP_fneg = 118;

  public static final short OP_dneg = 119;

  public static final short OP_ishl = 120;

  public static final short OP_lshl = 121;

  public static final short OP_ishr = 122;

  public static final short OP_lshr = 123;

  public static final short OP_iushr = 124;

  public static final short OP_lushr = 125;

  public static final short OP_iand = 126;

  public static final short OP_land = 127;

  public static final short OP_ior = 128;

  public static final short OP_lor = 129;

  public static final short OP_ixor = 130;

  public static final short OP_lxor = 131;

  public static final short OP_iinc = 132;

  public static final short OP_i2l = 133;

  public static final short OP_i2f = 134;

  public static final short OP_i2d = 135;

  public static final short OP_l2i = 136;

  public static final short OP_l2f = 137;

  public static final short OP_l2d = 138;

  public static final short OP_f2i = 139;

  public static final short OP_f2l = 140;

  public static final short OP_f2d = 141;

  public static final short OP_d2i = 142;

  public static final short OP_d2l = 143;

  public static final short OP_d2f = 144;

  public static final short OP_i2b = 145;

  public static final short OP_i2c = 146;

  public static final short OP_i2s = 147;

  public static final short OP_lcmp = 148;

  public static final short OP_fcmpl = 149;

  public static final short OP_fcmpg = 150;

  public static final short OP_dcmpl = 151;

  public static final short OP_dcmpg = 152;

  public static final short OP_ifeq = 153;

  public static final short OP_ifne = 154;

  public static final short OP_iflt = 155;

  public static final short OP_ifge = 156;

  public static final short OP_ifgt = 157;

  public static final short OP_ifle = 158;

  public static final short OP_if_icmpeq = 159;

  public static final short OP_if_icmpne = 160;

  public static final short OP_if_icmplt = 161;

  public static final short OP_if_icmpge = 162;

  public static final short OP_if_icmpgt = 163;

  public static final short OP_if_icmple = 164;

  public static final short OP_if_acmpeq = 165;

  public static final short OP_if_acmpne = 166;

  public static final short OP_goto = 167;

  public static final short OP_jsr = 168;

  public static final short OP_ret = 169;

  public static final short OP_tableswitch = 170;

  public static final short OP_lookupswitch = 171;

  public static final short OP_ireturn = 172;

  public static final short OP_lreturn = 173;

  public static final short OP_freturn = 174;

  public static final short OP_dreturn = 175;

  public static final short OP_areturn = 176;

  public static final short OP_return = 177;

  public static final short OP_getstatic = 178;

  public static final short OP_putstatic = 179;

  public static final short OP_getfield = 180;

  public static final short OP_putfield = 181;

  public static final short OP_invokevirtual = 182;

  public static final short OP_invokespecial = 183;

  public static final short OP_invokestatic = 184;

  public static final short OP_invokeinterface = 185;

  public static final short OP_invokedynamic = 186;

  public static final short OP_new = 187;

  public static final short OP_newarray = 188;

  public static final short OP_anewarray = 189;

  public static final short OP_arraylength = 190;

  public static final short OP_athrow = 191;

  public static final short OP_checkcast = 192;

  public static final short OP_instanceof = 193;

  public static final short OP_monitorenter = 194;

  public static final short OP_monitorexit = 195;

  public static final short OP_wide = 196;

  public static final short OP_multianewarray = 197;

  public static final short OP_ifnull = 198;

  public static final short OP_ifnonnull = 199;

  public static final short OP_goto_w = 200;

  public static final short OP_jsr_w = 201;

  public static final short ACC_PUBLIC = 0x1;

  public static final short ACC_PRIVATE = 0x2;

  public static final short ACC_PROTECTED = 0x4;

  public static final short ACC_STATIC = 0x8;

  public static final short ACC_FINAL = 0x10;

  public static final short ACC_SYNCHRONIZED = 0x20;

  public static final short ACC_SUPER = 0x20;

  public static final short ACC_VOLATILE = 0x40;

  public static final short ACC_TRANSIENT = 0x80;

  public static final short ACC_NATIVE = 0x100;

  public static final short ACC_INTERFACE = 0x200;

  public static final short ACC_ABSTRACT = 0x400;

  public static final short ACC_STRICT = 0x800;

  public static final short ACC_SYNTHETIC = 0x1000;

  public static final byte CONSTANT_Utf8 = 1;

  public static final byte CONSTANT_Integer = 3;

  public static final byte CONSTANT_Float = 4;

  public static final byte CONSTANT_Long = 5;

  public static final byte CONSTANT_Double = 6;

  public static final byte CONSTANT_Class = 7;

  public static final byte CONSTANT_String = 8;

  public static final byte CONSTANT_FieldRef = 9;

  public static final byte CONSTANT_MethodRef = 10;

  public static final byte CONSTANT_InterfaceMethodRef = 11;

  public static final byte CONSTANT_NameAndType = 12;
  
  public static final byte CONSTANT_MethodHandle = 15;
  
  public static final byte CONSTANT_MethodType = 16;

  public static final byte CONSTANT_InvokeDynamic = 18;

  public static final byte T_BOOLEAN = 4;

  public static final byte T_CHAR = 5;

  public static final byte T_FLOAT = 6;

  public static final byte T_DOUBLE = 7;

  public static final byte T_BYTE = 8;

  public static final byte T_SHORT = 9;

  public static final byte T_INT = 10;

  public static final byte T_LONG = 11;

  public static final String TYPE_boolean = "Z";

  public static final String TYPE_byte = "B";

  public static final String TYPE_int = "I";

  public static final String TYPE_short = "S";

  public static final String TYPE_long = "J";

  public static final String TYPE_float = "F";

  public static final String TYPE_double = "D";

  public static final String TYPE_char = "C";

  public static final String TYPE_void = "V";

  public static final String TYPE_String = "Ljava/lang/String;";

  public static final String TYPE_MethodHandle = "Ljava/lang/invoke/MethodHandle;";

  public static final String TYPE_MethodType = "Ljava/lang/invoke/MethodType;";

  public static final String TYPE_Object = "Ljava/lang/Object;";

  public static final String TYPE_Throwable = "Ljava/lang/Throwable;";

  public static final String TYPE_Class = "Ljava/lang/Class;";

  public static final String TYPE_Exception = "Ljava/lang/Exception;";

  public static final String TYPE_RuntimeException = "Ljava/lang/RuntimeException;";

  public static final String TYPE_Error = "Ljava/lang/Error;";

  /**
   * This represents the type of "null", which can be any object. It is not defined by the JVM spec.
   */
  public static final String TYPE_null = "L;";

  /** This represents a type which is unknown. It is not defined by the JVM spec. */
  public static final String TYPE_unknown = "L?;";

  public static final byte TYPE_int_index = 0;

  public static final byte TYPE_long_index = 1;

  public static final byte TYPE_float_index = 2;

  public static final byte TYPE_double_index = 3;

  public static final byte TYPE_Object_index = 4;

  public static final byte TYPE_byte_index = 5;

  public static final byte TYPE_char_index = 6;

  public static final byte TYPE_short_index = 7;

  public static final byte TYPE_boolean_index = 8;

  public static final String[] indexedTypes = { TYPE_int, TYPE_long, TYPE_float, TYPE_double, TYPE_Object, TYPE_byte, TYPE_char,
      TYPE_short, TYPE_boolean };

  public static final byte[] indexedTypes_T = { T_INT, T_LONG, T_FLOAT, T_DOUBLE, 0, T_BYTE, T_CHAR, T_SHORT, T_BOOLEAN };

  // these constants are used by analyses to report results
  public static final int NO = 1;

  public static final int YES = 2;

  public static final int MAYBE = 3;
}
