public MemberEmitterDescription Build(List <MappingMember> members) { var emitter = new EmitComposite(); members.ForEach(x => emitter.Add(Build(x))); var result = new MemberEmitterDescription(emitter, _mapperCache); result.AddMapper(_mapperCache); return(result); }
public MemberEmitterDescription Build(TypePair parentTypePair, List <MappingMemberPath> members) { var emitComposite = new EmitComposite(); foreach (var path in members) { IEmitter emitter = Build(parentTypePair, path); emitComposite.Add(emitter); } var result = new MemberEmitterDescription(emitComposite, _mapperCache); result.AddMapper(_mapperCache); return(result); }
private Option <MapperCache> EmitMapClass(TypePair typePair, TypeBuilder typeBuilder) { MethodBuilder methodBuilder = typeBuilder.DefineMethod(MapClassMethod, OverrideProtected, typePair.Target, new[] { typePair.Source, typePair.Target }); var codeGenerator = new CodeGenerator(methodBuilder.GetILGenerator()); var emitterComposite = new EmitComposite(); MemberEmitterDescription emitterDescription = EmitMappingMembers(typePair); emitterComposite.Add(emitterDescription.Emitter); emitterComposite.Add(EmitReturn.Return(EmitArgument.Load(typePair.Target, 2))); emitterComposite.Emit(codeGenerator); return(emitterDescription.MapperCache); }