public static Function WrapFunction(this MethodInfo method, Object target) { var parameters = method.GetParameters(); var f = default(Function); if (parameters.Length != 1 || parameters[0].ParameterType != typeof(Object[]) || method.ReturnType != typeof(Object)) { f = new Function(args => { var result = Curry.Min(parameters.Length, f, args); if (result == null && method.TryMatch(parameters, ref args)) { result = method.Call(target, args); } return(result); }); } else { f = (Function)Delegate.CreateDelegate(typeof(Function), target, method); } return(f); }
public void Invoke(IExecutionContext context) { var parameters = (Object[])context.Pop(); if (parameters.Length == 0) { context.Pause(); } else if (parameters.Length == _index) { var function = (Function)context.Pop(); var value = Curry.Min(_index + 1, function, parameters); context.Push(value); context.Pause(); } else { var value = parameters[_index]; context.Scope.Add(_name, value); context.Push(parameters); } }
protected Object TryCurry(Object[] arguments) { return(Curry.Min(_maxParameters, _proxy, arguments)); }