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