예제 #1
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);
        }
예제 #2
0
 public abstract void AppendRead(ILGenerator generator, MessageField field);
예제 #3
0
 protected virtual void AppendMessageHeaderCore(ILGenerator generator,
                                                ForEachLoop loop, MessageField field)
 {
 }
예제 #4
0
 protected MessageField(MessageField other) :
     this(other._tag, other._fieldIO)
 {
 }