Class enumType = Class.forName(VM_Class.getUtf(constantPool, typeNameIndex).toString());
Class enumType = VM_TypeReference.findOrCreate(classLoader, VM_Class.getUtf(constantPool, typeNameIndex) ).resolve().getClassForType();
  static Object readValue(int constantPool[], DataInputStream input,                          ClassLoader classLoader) throws IOException, ClassNotFoundException {    // Read element value's tag and decode    byte elementValue_tag = input.readByte();    Object value;    switch (elementValue_tag) {    case 'B':      {        Offset offset = VM_Class.getLiteralOffset(constantPool, input.readUnsignedShort());        value = Byte.valueOf((byte)VM_Statics.getSlotContentsAsInt(offset));        break;      }    case 'C':      {        Offset offset = VM_Class.getLiteralOffset(constantPool, input.readUnsignedShort());        value = Character.valueOf((char)VM_Statics.getSlotContentsAsInt(offset));        break;      }    case 'D':       {        Offset offset = VM_Class.getLiteralOffset(constantPool, input.readUnsignedShort());        long longValue = VM_Statics.getSlotContentsAsLong(offset);        value = new Double(Double.longBitsToDouble(longValue));        break;      }    case 'F':      {        Offset offset = VM_Class.getLiteralOffset(constantPool, input.readUnsignedShort());        int intValue = VM_Statics.getSlotContentsAsInt(offset);        value = new Float(Float.intBitsToFloat(intValue));        break;      }    case 'I':      {        Offset offset = VM_Class.getLiteralOffset(constantPool, input.readUnsignedShort());        value = new Integer(VM_Statics.getSlotContentsAsInt(offset));        break;      }    case 'J':      {        Offset offset = VM_Class.getLiteralOffset(constantPool, input.readUnsignedShort());        value = new Long(VM_Statics.getSlotContentsAsLong(offset));        break;      }    case 'S':      {        Offset offset = VM_Class.getLiteralOffset(constantPool, input.readUnsignedShort());        value = Short.valueOf((short)VM_Statics.getSlotContentsAsInt(offset));        break;      }    case 'Z':      {        Offset offset = VM_Class.getLiteralOffset(constantPool, input.readUnsignedShort());        value = Boolean.valueOf(VM_Statics.getSlotContentsAsInt(offset) == 1);        break;      }    case 's':      {        value = VM_Class.getUtf(constantPool, input.readUnsignedShort()).toString();        break;      }    case 'e':      {        int typeNameIndex = input.readUnsignedShort();        Class enumType = Class.forName(VM_Class.getUtf(constantPool, typeNameIndex).toString());        int constNameIndex = input.readUnsignedShort();        value = Enum.valueOf(enumType, VM_Class.getUtf(constantPool, constNameIndex).toString());        break;      }    case 'c':      {        int classInfoIndex = input.readUnsignedShort();        value= Class.forName(VM_Class.getUtf(constantPool, classInfoIndex).toString());        break;      }    case '@':      value = VM_Annotation.readAnnotation(constantPool, input, classLoader);      break;    case '[':      {        int numValues = input.readUnsignedShort();        Object array[] = new Object[numValues];        for (int i=0; i < numValues; i++) {          array[i] = readValue(constantPool, input, classLoader);        }        value = array;        break;      }    default:      value = null;      throw new ClassFormatError("Unknown element_value tag '" +                                 (char)elementValue_tag + "'");    }    return value;  }