Beispiel #1
0
        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));
 }