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