/// <summary> /// Reduces a flat list of parameters to a params array /// </summary> private JsValue[] ProcessParamsArrays(JsValue[] jsArguments, IEnumerable<MethodInfo> methodInfos) { foreach (var methodInfo in methodInfos) { var parameters = methodInfo.GetParameters(); if (!parameters.Any(p => Attribute.IsDefined(p, typeof(ParamArrayAttribute)))) continue; var nonParamsArgumentsCount = parameters.Length - 1; if (jsArguments.Length < nonParamsArgumentsCount) continue; var newArgumentsCollection = jsArguments.Take(nonParamsArgumentsCount).ToList(); var argsToTransform = jsArguments.Skip(nonParamsArgumentsCount).ToList(); if (argsToTransform.Count == 1 && argsToTransform.FirstOrDefault().IsArray()) continue; var jsArray = Engine.Array.Construct(Arguments.Empty); Engine.Array.PrototypeObject.Push(jsArray, argsToTransform.ToArray()); newArgumentsCollection.Add(new JsValue(jsArray)); return newArgumentsCollection.ToArray(); } return jsArguments; }