ICSharpCode.NRefactory.Utils.FastSerializer.EmitReadField C# (CSharp) Method

EmitReadField() public method

public EmitReadField ( ILGenerator il, LocalBuilder reader, LocalBuilder instance, FieldInfo field ) : void
il System.Reflection.Emit.ILGenerator
reader System.Reflection.Emit.LocalBuilder
instance System.Reflection.Emit.LocalBuilder
field System.Reflection.FieldInfo
return void
		void EmitReadField(ILGenerator il, LocalBuilder reader, LocalBuilder instance, FieldInfo field)
		{
			Type fieldType = field.FieldType;
			if (fieldType.IsValueType) {
				if (fieldType.IsPrimitive || fieldType.IsEnum) {
					il.Emit(OpCodes.Ldloc, instance); // instance
					ReadPrimitiveValue(il, reader, fieldType); // instance, value
					il.Emit(OpCodes.Stfld, field); // instance.field = value;
				} else {
					il.Emit(OpCodes.Ldloc, instance); // instance
					il.Emit(OpCodes.Ldflda, field); // &instance.field
					EmitReadValueType(il, reader, fieldType);
				}
			} else {
				il.Emit(OpCodes.Ldloc, instance); // instance
				il.Emit(OpCodes.Ldarg_0); // instance, context
				il.Emit(OpCodes.Call, readObject); // instance, context.ReadObject()
				il.Emit(OpCodes.Castclass, fieldType);
				il.Emit(OpCodes.Stfld, field); // instance.field = (fieldType) context.ReadObject();
			}
		}