/** * Edge as Function use case: ?x xpath('/book/title') ?y */ private int eval(Node gNode, Exp exp, Stack stack, int n) { int backtrack = n - 1; Edge qEdge = exp.getEdge(); Node qNode = qEdge.getNode(1); Memory env = memory; Evaluator ev = evaluator; Matcher mm = match; for (Node node : ev.evalList(exp.getFilter(), env)) { if (mm.match(qNode, node, env) && env.push(qNode, node)) { backtrack = eval(gNode, stack, n + 1); env.pop(qNode); if (backtrack < n) { // if (hasEvent){ // send(Event.FINISH, exp, gNode, stack); // } return backtrack; } } } return backtrack; }