public override object Evaluate(IModel model) { var parameters = new List <object>(); for (int i = 0; i < _function.Arguments.Length; i++) { var arg = _function.Arguments[i]; if (!arg.Params) { var node = _nested.Nodes[i]; object value = node.Evaluate(model); parameters.Add(TypeConverter.To(value, _function.Arguments[i].Type)); } else { for (int pi = i; pi < _nested.Nodes.Count; pi++) { var node = _nested.Nodes[pi]; object value = node.Evaluate(model); parameters.Add(TypeConverter.To(value, _function.Arguments[i].Type)); } } } try { return(_function.Evaluate(parameters.ToArray())); } catch (ExceptionWithContext EWC) { if (EWC.Context == null) { throw ExceptionWithContext.MakePartial(EWC).Decorate(Token); } else { throw EWC; } } catch (Exception e) { throw FunctionEvaluationException.EvaluationError(e).Decorate(Token); } }