private void EvaluateArgs(EvaluationContext context, FunctionBindingInfo targetInfo) { object[] values = context.CreateCallArgs(this.Arguments.Count); //Just for perfomance, we implement two cases separately if (targetInfo.IsSet(FunctionFlags.HasParamArray)) { //with params array for (int i = 0; i < targetInfo.ParamCount - 1; i++) { Arguments[i].Evaluate(context); values[i] = context.CurrentResult; } //Now combine all remaining arguments into one array and put it into the last element int startIndex = targetInfo.ParamCount - 1; int arrayLen = Arguments.Count - startIndex; object[] arrayArgs = new object[arrayLen]; for (int i = 0; i < arrayLen; i++) { Arguments[startIndex + i].Evaluate(context); arrayArgs[i] = context.CurrentResult; } values[startIndex] = arrayArgs; } else { //No params array for (int i = 0; i < Arguments.Count; i++) { Arguments[i].Evaluate(context); values[i] = context.CurrentResult; } } context.CallArgs = values; }//method
private void EvaluateArgs(EvaluationContext context, FunctionBindingInfo targetInfo) { object[] values = context.CreateCallArgs(this.Arguments.Count); //Just for perfomance, we implement two cases separately if (targetInfo.IsSet(FunctionFlags.HasParamArray)) { //with params array for (int i = 0; i < targetInfo.ParamCount-1; i++) { Arguments[i].Evaluate(context); values[i] = context.CurrentResult; } //Now combine all remaining arguments into one array and put it into the last element int startIndex = targetInfo.ParamCount - 1; int arrayLen = Arguments.Count - startIndex; object[] arrayArgs = new object[arrayLen]; for (int i = 0; i < arrayLen; i++) { Arguments[startIndex + i].Evaluate(context); arrayArgs[i] = context.CurrentResult; } values[startIndex] = arrayArgs; } else { //No params array for (int i = 0; i < Arguments.Count; i++) { Arguments[i].Evaluate(context); values[i] = context.CurrentResult; } } context.CallArgs = values; }//method