private void BuildReadMethods(SerializableType target, TravellerContext context) { var typedMethodBuilder = _travelReadMethod; var readBuilder = new DynamicReadTravellerBuilder(typedMethodBuilder, target, context, _typeProvider.Provider); readBuilder.BuildTravelReadMethod(); var untypedMethodBuilder = _classBuilder.DefineOverloadMethod("Travel", typeof(void), new[] { typeof(IReadVisitor), typeof(object) }); var il = untypedMethodBuilder.IL; il.InvokeMethod(ILPointer.This(), typedMethodBuilder.Method, ILPointer.Arg(1, typeof(IReadVisitor)), ILPointer.Arg(2, typeof(object)).Cast(target.Type)); il.Emit(OpCodes.Ret); }
private void BuildReadMethods(SerializableType target, TravellerContext context) { var typedMethodBuilder = _travelReadMethod; var readBuilder = new DynamicReadTravellerBuilder(typedMethodBuilder, target, context); readBuilder.BuildTravelReadMethod(); var untypedMethodBuilder = _classBuilder.DefineOverloadMethod("Travel", typeof(void), new[] { typeof(IReadVisitor), typeof(object) }); var il = untypedMethodBuilder.IL; il.LoadThis(); il.Var.Load(new MethodArgILCodeVariable(1, typeof(IReadVisitor))); il.Var.Load(new MethodArgILCodeVariable(2, typeof(object))); il.Cast(target.Type); il.Call(typedMethodBuilder.Method); il.Return(); }