ctxExpr = null;
}
List<ASTNode> predicates = null;
ASTNode pathNode = rpen.getPath();
if (ASTTag.AXIS_STEP.equals(pathNode.getTag())) {
AxisStepNode axisNode = (AxisStepNode) pathNode;
predicates = axisNode.getPredicates();
AxisStepNode.Axis axis = axisNode.getAxis();
if (ctxExpr == null) {
ctxExpr = vre(tCtx.varScope.lookupVariable(XMLQueryCompilerConstants.DOT_VAR_NAME)
.getLogicalVariable());
}
Function axisFn = translateAxis(axis);
NodeType nt = translateNodeTest(axis, axisNode.getNodeTest());
int ntCode = currCtx.encodeSequenceType(SequenceType.create(nt, Quantifier.QUANT_ONE));
ctxExpr = sfce(axisFn,
treat(ctxExpr, SequenceType.create(AnyNodeType.INSTANCE, Quantifier.QUANT_STAR)),
ce(SequenceType.create(BuiltinTypeRegistry.XS_INT, Quantifier.QUANT_ONE), ntCode));
asc = isForwardAxis(axis);
} else if (ASTTag.FILTER_EXPRESSION.equals(pathNode.getTag())) {
FilterExprNode filterNode = (FilterExprNode) pathNode;
predicates = filterNode.getPredicates();
ctxExpr = vre(translateExpression(filterNode.getExpr(), tCtx));
} else {
throw new IllegalStateException("Unknown path node: " + pathNode.getTag());
}
if (predicates != null && !predicates.isEmpty()) {
ctxExpr = sfce(asc ? BuiltinOperators.SORT_DISTINCT_NODES_ASC_OR_ATOMICS
: BuiltinOperators.SORT_DISTINCT_NODES_DESC_OR_ATOMICS, ctxExpr);
for (ASTNode pn : predicates) {