public override void AppendWrite(ILGenerator generator, MessageField field) { var done = generator.DefineLabel(); var tmp = generator.DeclareLocal(typeof(Nullable <>).MakeGenericType(FieldType)); generator.Emit(OpCodes.Ldloc_0); generator.Emit(OpCodes.Call, Property.GetGetMethod()); generator.Emit(OpCodes.Stloc, tmp.LocalIndex); generator.Emit(OpCodes.Ldloca, tmp.LocalIndex); generator.Emit(OpCodes.Call, typeof(Nullable <>) .MakeGenericType(FieldType) .GetProperty("HasValue") .GetGetMethod()); generator.Emit(OpCodes.Brfalse_S, done); field.AppendGuard(generator, Property.GetGetMethod(), done); field.AppendHeader(generator); generator.Emit(OpCodes.Ldloca, tmp.LocalIndex); generator.Emit(OpCodes.Call, typeof(Nullable <>) .MakeGenericType(FieldType) .GetProperty("Value") .GetGetMethod()); field.AppendWriteField(generator); generator.Emit(OpCodes.Pop); generator.MarkLabel(done); }
public override void AppendWrite(ILGenerator generator, MessageField field) { var done = generator.DefineLabel(); field.AppendGuard(generator, Property.GetGetMethod(), done); field.AppendHeader(generator); generator.Emit(OpCodes.Ldloc_0); generator.Emit(OpCodes.Call, Property.GetGetMethod()); field.AppendWriteField(generator); generator.Emit(OpCodes.Pop); generator.MarkLabel(done); }