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

EmitWriteField() public method

Emit 'write instance.Field'. Stack transition: ... => ...
public EmitWriteField ( ILGenerator il, LocalBuilder writer, LocalBuilder instance, FieldInfo field ) : void
il System.Reflection.Emit.ILGenerator
writer System.Reflection.Emit.LocalBuilder
instance System.Reflection.Emit.LocalBuilder
field System.Reflection.FieldInfo
return void
		void EmitWriteField(ILGenerator il, LocalBuilder writer, LocalBuilder instance, FieldInfo field)
		{
			Type fieldType = field.FieldType;
			if (fieldType.IsValueType) {
				if (fieldType.IsPrimitive || fieldType.IsEnum) {
					il.Emit(OpCodes.Ldloc, writer); // writer
					il.Emit(OpCodes.Ldloc, instance); // writer, instance
					il.Emit(OpCodes.Ldfld, field); // writer, instance.field
					WritePrimitiveValue(il, fieldType);
				} else {
					il.Emit(OpCodes.Ldloc, instance); // instance
					il.Emit(OpCodes.Ldfld, field); // instance.field
					EmitWriteValueType(il, writer, fieldType);
				}
			} else {
				il.Emit(OpCodes.Ldarg_0); // context
				il.Emit(OpCodes.Ldloc, instance); // context, instance
				il.Emit(OpCodes.Ldfld, field); // context, instance.field
				il.Emit(OpCodes.Call, writeObjectID); // context.WriteObjectID(instance.field);
			}
		}