/// <summary> /// 添加成员 /// </summary> /// <param name="name">成员名称</param> private unsafe void push(string name) { if (isFirstMember == 0) { generator.charStreamSimpleWriteNotNull(OpCodes.Ldloc_0, SerializeMethodCache.GetNamePool(name), name.Length + 4); } else { generator.charStreamSimpleWriteNotNull(OpCodes.Ldloc_0, SerializeMethodCache.GetNamePool(name) + 1, name.Length + 3); isFirstMember = 0; } }
/// <summary> /// 添加成员 /// </summary> /// <param name="name">成员名称</param> /// <param name="memberIndex"></param> /// <param name="end"></param> private unsafe void push(string name, int memberIndex, Label end) { Label next = generator.DefineLabel(), value = generator.DefineLabel(); generator.memberMapIsMember(OpCodes.Ldarg_0, memberIndex); generator.Emit(OpCodes.Brfalse_S, end); generator.Emit(OpCodes.Ldloc_0); generator.Emit(OpCodes.Brtrue_S, next); char *nameChar = SerializeMethodCache.GetNamePool(name); generator.Emit(OpCodes.Ldc_I4_1); generator.Emit(OpCodes.Stloc_0); generator.charStreamSimpleWriteNotNull(OpCodes.Ldarg_3, nameChar + 1, name.Length + 3); generator.Emit(OpCodes.Br_S, value); generator.MarkLabel(next); generator.charStreamSimpleWriteNotNull(OpCodes.Ldarg_3, nameChar, name.Length + 4); generator.MarkLabel(value); }