Beispiel #1
0
 /// <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;
     }
 }
Beispiel #2
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);
        }