public override object Evaluate(XPathNodeIterator nodeIterator) {
if (xsltContext == null) {
throw XPathException.Create(Res.Xp_NoContext);
}
// calculate arguments:
object[] argVals = new object[args.Count];
for (int i = 0; i < args.Count; i ++) {
argVals[i] = args[i].Evaluate(nodeIterator);
if (argVals[i] is XPathNodeIterator) {
argVals[i] = new XPathSelectionIterator(nodeIterator.Current, args[i]);
}
}
try {
return ProcessResult(function.Invoke(xsltContext, argVals, nodeIterator.Current));
} catch(Exception ex) {
throw XPathException.Create(Res.Xp_FunctionFailed, QName, ex);
}
}