private static void GenerateUpdateFields(ReaderGenerationContext context, Type formalType, LocalBuilder objectIdLocal)
{
var fields = context.DisableStamping
? ((TypeSimpleDescriptor)formalType).FieldsToDeserialize
: ((TypeFullDescriptor)formalType).FieldsToDeserialize;
foreach (var fieldOrType in fields)
{
if (fieldOrType.Field == null)
{
GenerateReadField(context, fieldOrType.TypeToOmit, false);
context.Generator.Emit(OpCodes.Pop);
continue;
}
var field = fieldOrType.Field;
if (field.IsDefined(typeof(TransientAttribute), false))
{
if (field.IsDefined(typeof(ConstructorAttribute), false))
{
context.Generator.PushFieldInfoOntoStack(field);
context.PushDeserializedObjectOntoStack(objectIdLocal);
context.Generator.GenerateCodeCall <FieldInfo, object>(GenerateUpdateFieldsStaticHelper);
}
continue;
}
context.PushDeserializedObjectOntoStack(objectIdLocal);
GenerateReadField(context, field.FieldType, false);
context.Generator.Emit(OpCodes.Stfld, field);
}
}