class REXML::XPathParser
def step(path_stack, any_type: :element, order: :forward)
def step(path_stack, any_type: :element, order: :forward) nodesets = yield begin enter(:step, path_stack, nodesets) if @debug nodesets = node_test(path_stack, nodesets, any_type: any_type) while path_stack[0] == :predicate path_stack.shift # :predicate predicate_expression = path_stack.shift.dclone nodesets = evaluate_predicate(predicate_expression, nodesets) end if nodesets.size == 1 ordered_nodeset = nodesets[0] else raw_nodes = [] nodesets.each do |nodeset| nodeset.each do |node| if node.respond_to?(:raw_node) raw_nodes << node.raw_node else raw_nodes << node end end end ordered_nodeset = sort(raw_nodes, order) end new_nodeset = [] ordered_nodeset.each do |node| # TODO: Remove duplicated new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1) end new_nodeset ensure leave(:step, path_stack, new_nodeset) if @debug end end