示例#1
0
        public override void AppendRead(ILGenerator generator, MessageField field)
        {
            generator.Emit(OpCodes.Ldloc_0);
            generator.Emit(OpCodes.Ldarg_1);
            field.AppendReadField(generator);

            generator.Emit(OpCodes.Call, Property.GetSetMethod());
        }
示例#2
0
        public override void AppendRead(ILGenerator generator, MessageField field)
        {
            generator.Emit(OpCodes.Ldloc_0);
            generator.Emit(OpCodes.Ldarg_1);
            field.AppendReadField(generator);
            generator.Emit(OpCodes.Newobj, typeof(Nullable <>)
                           .MakeGenericType(FieldType)
                           .GetConstructor(new Type[] { FieldType }));

            generator.Emit(OpCodes.Call, Property.GetSetMethod());
        }
示例#3
0
        public override void AppendRead(ILGenerator generator, MessageField field)
        {
            LocalBuilder count = generator.DeclareLocal(typeof(uint));
            Label        top   = generator.DefineLabel();
            Label        next  = generator.DefineLabel();

            generator.Emit(OpCodes.Br_S, next);
            generator.Emit(OpCodes.Nop);
            generator.MarkLabel(top);
            generator.Emit(OpCodes.Ldloc_0);
            generator.Emit(OpCodes.Call, Property.GetGetMethod());
            generator.Emit(OpCodes.Ldarg_1);
            field.AppendReadField(generator);
            generator.Emit(OpCodes.Callvirt, AddMethod);
            generator.MarkLabel(next);
            generator.Emit(OpCodes.Ldarg_1);
            generator.Emit(OpCodes.Call, typeof(MessageReader)
                           .GetProperty("EndOfStream")
                           .GetGetMethod());

            generator.Emit(OpCodes.Brfalse_S, top);
        }