public static CONSTANT_InvokeDynamic_info ParseData(byte[] data, ref int pos)
        {
            CONSTANT_InvokeDynamic_info res = new CONSTANT_InvokeDynamic_info();

            res.BootstrapMethodAttrIndex = Utils.ReadUShort(data, ref pos);
            res.NameAndTypeIndex         = Utils.ReadUShort(data, ref pos);
            return(res);
        }
        public static ConstantPoolDescription ParseData(byte[] data, ref int pos)
        {
            ConstantPoolDescription res = new ConstantPoolDescription();

            res.Tag = (ConstantPoolTag)data[pos++];
            switch (res.Tag)
            {
            case ConstantPoolTag.CONSTANT_Class:
                res.Info = CONSTANT_Class_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_Fieldref:
            case ConstantPoolTag.CONSTANT_Methodref:
            case ConstantPoolTag.CONSTANT_InterfaceMethodref:
                res.Info = CONSTANT_GeneralRef_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_String:
                res.Info = CONSTANT_String_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_Integer:
            case ConstantPoolTag.CONSTANT_Float:
                res.Info = CONSTANT_B4_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_Long:
            case ConstantPoolTag.CONSTANT_Double:
                res.Info = CONSTANT_B8_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_NameAndType:
                res.Info = CONSTANT_NameAndType_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_Utf8:
                res.Info = CONSTANT_Utf8_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_MethodHandle:
                res.Info = CONSTANT_MethodHandle_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_MethodType:
                res.Info = CONSTANT_MethodType_info.ParseData(data, ref pos);
                break;

            case ConstantPoolTag.CONSTANT_InvokeDynamic:
                res.Info = CONSTANT_InvokeDynamic_info.ParseData(data, ref pos);
                break;
            }
            return(res);
        }