code: private int readFrameType(final Object[] frame, final int index, int v,
              final char[] buf, final Label[] labels) {
          int type = b[v++] & 0xFF;
          switch (type) {
          case 0:
              frame[index] = Opcodes.TOP;
              break;
          case 1:
              frame[index] = Opcodes.INTEGER;
              break;
          case 2:
              frame[index] = Opcodes.FLOAT;
              break;
          case 3:
              frame[index] = Opcodes.DOUBLE;
              break;
          case 4:
              frame[index] = Opcodes.LONG;
              break;
          case 5:
              frame[index] = Opcodes.NULL;
              break;
          case 6:
              frame[index] = Opcodes.UNINITIALIZED_THIS;
              break;
          case 7: // Object
              frame[index] = readClass(v, buf);
              v += 2;
              break;
          default: // Uninitialized
              frame[index] = readLabel(readUnsignedShort(v), labels);
              v += 2;
          }
          return v;
      }
docs: Reads a stack map frame type and stores it at the given index in the
  given array.
  
  @param frame
  the array where the parsed type must be stored.
  @param index
  the index in 'frame' where the parsed type must be stored.
  @param v
  the start offset of the stack map frame type to read.
  @param buf
  a buffer to read strings.
  @param labels
  the labels of the method currently being parsed, indexed by
  their offset. If the parsed type is an Uninitialized type, a
  new label for the corresponding NEW instruction is stored in
  this array if it does not already exist.
  @return the offset of the first byte after the parsed type.