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
			int offset = readUnsignedShort(v);
			if(labels[offset] == null)
				{
				labels[offset] = new Label();
				}
			frame[index] = labels[offset];
			v += 2;
		}
	return v;
}