if(signature == null || signature.getName() == null) throw new XPathException("Invalid function signature for " + qname.getLocalName());
	public Sequence eval(		Sequence contextSequence,		Item contextItem)		throws XPathException {		String fname = getArgument(0).eval(contextSequence, contextItem).getStringValue();		QName qname = QName.parseFunction(context, fname);		String uri = qname.getNamespaceURI();		FunctionSignature signature;		Module module = context.getModule(uri);		if(module != null) {			signature = module.getSignatureForFunction(qname);		} else {			UserDefinedFunction func = context.resolveFunction(qname);			signature = func.getSignature();		}		MemTreeBuilder builder = context.getDocumentBuilder();		AttributesImpl attribs = new AttributesImpl();		attribs.addAttribute("", "name", "name", "CDATA", signature.getName().toString());		attribs.addAttribute("", "module", "module", "CDATA", signature.getName().getNamespaceURI());		int nodeNr = builder.startElement("", "function", "function", attribs);		attribs.clear();		if(signature.getDescription() != null) {			builder.startElement("", "description", "description", attribs);			builder.characters(signature.getDescription());			builder.endElement();		}		builder.startElement("", "signature", "signature", attribs);		builder.characters(signature.toString());		builder.endElement();		builder.endElement();		return ((DocumentImpl)builder.getDocument()).getNode(nodeNr);	}