moduleCtx.registerVariable(var);
break;
}
case FUNCTION_DECLARATION: {
FunctionDeclNode node = (FunctionDeclNode) d;
boolean external = node.getBody() == null;
QName name = createQName(node.getName(), moduleCtx.getDefaultFunctionNamespaceUri());
String uri = name.getNamespaceURI();
if (XQueryConstants.FN_NSURI.equals(uri) || XQueryConstants.XS_NSURI.equals(uri)
|| XQueryConstants.XSI_NSURI.equals(uri) || XQueryConstants.XML_NSURI.equals(uri)) {
throw new SystemException(ErrorCode.XQST0045, node.getSourceLocation());
}
SequenceType rType = SequenceType.create(AnyItemType.INSTANCE, Quantifier.QUANT_STAR);
if (node.getReturnType() != null) {
rType = createSequenceType(node.getReturnType());
}
Pair<QName, SequenceType> paramTypes[] = new Pair[node.getParameters().size()];
for (int i = 0; i < paramTypes.length; ++i) {
ParamNode pNode = node.getParameters().get(i);
QName pName = createQName(pNode.getName());
SequenceType pType = SequenceType.create(AnyItemType.INSTANCE, Quantifier.QUANT_STAR);
if (pNode.getType() != null) {
pType = createSequenceType(pNode.getType());
}
paramTypes[i] = Pair.<QName, SequenceType> of(pName, pType);
}
Signature sign = new Signature(rType, paramTypes);
Function f = external ? new ExternalFunction(name, sign) : new UserDefinedXQueryFunction(name,
sign, null);
moduleCtx.registerFunction(f);
break;
}
case OPTION_DECLARATION: {
OptionDeclNode node = (OptionDeclNode) d;
QName name = createQName(node.getName());
moduleCtx.setOption(name, node.getValue());
break;
}
default:
throw new IllegalStateException("Unknown node: " + d.getTag());