private static Func <object[], object> EmitDelegateFromExpression(Expression expr) { var method = new DynamicMethod("CreateA", typeof(object), new[] { typeof(object[]) }); var il = method.GetILGenerator(); var ok = EmittingVisitor.TryVisit(expr, il); il.Emit(OpCodes.Ret); return((Func <object[], object>)method.CreateDelegate(typeof(Func <object[], object>))); }
static partial void CompileToDelegate(Expression expression, ref FactoryDelegate result) { var method = new DynamicMethod(string.Empty, typeof(object), _factoryDelegateArgTypes, typeof(Container).Module, skipVisibility: true); var il = method.GetILGenerator(); var emitted = EmittingVisitor.TryVisit(expression, il); if (emitted) { il.Emit(OpCodes.Ret); result = (FactoryDelegate)method.CreateDelegate(typeof(FactoryDelegate)); } }