private void popContext() {
currCtx = currCtx.getParent();
}
public Module translateModule(ModuleNode moduleNode) throws SystemException {
Module module = new Module();
moduleCtx = new StaticContextImpl(rootCtx);
moduleCtx.registerVariable(new XQueryVariable(XMLQueryCompilerConstants.DOT_VAR_NAME, SequenceType.create(
AnyItemType.INSTANCE, Quantifier.QUANT_ONE), newLogicalVariable()));
rootVarScope = new RootVariableScope();
currCtx = moduleCtx;
module.setModuleContext(moduleCtx);
module.setCompilerControlBlock(ccb);
VersionDeclNode ver = moduleNode.getVersion();
if (ver != null) {
if (!"1.0".equals(ver.getVersion())) {
throw new SystemException(ErrorCode.XQST0031, ver.getSourceLocation());
}
}
switch (moduleNode.getTag()) {
case LIBRARY_MODULE: {
module.setModuleType(ModuleType.LIBRARY);
LibraryModuleNode lmNode = (LibraryModuleNode) moduleNode;
String prefix = lmNode.getModuleDecl().getPrefix();
String uri = unquote(lmNode.getModuleDecl().getTargetNS());
if (prefix != null) {
currCtx.registerNamespaceUri(prefix, uri);
}
module.setNamespaceUri(uri);
break;
}
case MAIN_MODULE: {
module.setModuleType(ModuleType.MAIN);
break;
}
default:
throw new IllegalStateException("Unknown module type: " + moduleNode.getTag());
}
PrologNode prologNode = moduleNode.getProlog();
parsePrologPass1(prologNode);
parsePrologPass2(prologNode);
ILogicalPlan plan = null;
switch (moduleNode.getTag()) {
case LIBRARY_MODULE:
throw new SystemException(ErrorCode.TODO);
case MAIN_MODULE:
plan = translateMainModule((MainModuleNode) moduleNode);
}
module.setBody(plan);
return module;
}