void EmitScanField(ILGenerator il, LocalBuilder instance, FieldInfo field)
{
if (field.FieldType.IsValueType) {
il.Emit(OpCodes.Ldloc, instance); // instance
il.Emit(OpCodes.Ldfld, field); // instance.field
EmitScanValueType(il, field.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, mark); // context.Mark(instance.field);
}
}