}
case VARIABLE_DECLARATION: {
VarDeclNode node = (VarDeclNode) d;
QName name = createQName(node.getName());
SequenceType type = SequenceType.create(AnyItemType.INSTANCE, Quantifier.QUANT_STAR);
if (node.getType() != null) {
type = createSequenceType(node.getType());
}
LogicalVariable lVar = newLogicalVariable();
XQueryVariable var = new XQueryVariable(name, type, lVar);
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);
}