traverseNodeSetDTM(classGen,methodGen,key);
traverseNodeSet(classGen,methodGen,key);
    public void translate(ClassGenerator classGen, MethodGenerator methodGen) {	final ConstantPoolGen cpg = classGen.getConstantPool();	final InstructionList il = methodGen.getInstructionList();	final int current = methodGen.getLocalIndex("current");	// AbstractTranslet.buildKeyIndex(name,node_id,value) => void	final int key = cpg.addMethodref(TRANSLET_CLASS,					 "buildKeyIndex",					 "("+STRING_SIG+"I"+STRING_SIG+")V");	// DOM.getAxisIterator(root) => NodeIterator	final int git = cpg.addMethodref(classGen.getDOMClass(),					 "getAxisIterator",					 "(I)"+NODE_ITERATOR_SIG);	// Save current node and current iterator on the stack	il.append(methodGen.loadCurrentNode());	il.append(methodGen.loadIterator());	// Get an iterator for all nodes in the DOM	il.append(methodGen.loadDOM());		il.append(new PUSH(cpg,Axis.DESCENDANT));	il.append(new INVOKEVIRTUAL(git));	// Reset the iterator to start with the root node	il.append(methodGen.loadCurrentNode());	il.append(methodGen.setStartNode());	il.append(methodGen.storeIterator());	// Loop for traversing all nodes in the DOM	final BranchHandle nextNode = il.append(new GOTO(null));	final InstructionHandle loop = il.append(NOP);	// Check if the current node matches the pattern in "match"	il.append(methodGen.loadCurrentNode());	_match.translate(classGen, methodGen);	_match.synthesize(classGen, methodGen); // Leaves 0 or 1 on stack	final BranchHandle skipNode = il.append(new IFEQ(null));		// If this is just a single node we should convert that to a string	// and use that string as the value in the index for this key.	if ((_useType instanceof NodeType) || (_useType instanceof StringType)) {	    il.append(classGen.loadTranslet());	    il.append(new PUSH(cpg, _name.toString()));	    il.append(methodGen.loadCurrentNode());	    _use.translate(classGen,methodGen);	    il.append(new INVOKEVIRTUAL(key));	}	// If this is a node-set we must go through each node in the set	// and create one entry in the key index for each node in the set.	else {	    // Pass current node as parameter (we're indexing on that node)	    il.append(methodGen.loadCurrentNode());	    traverseNodeSetDTM(classGen,methodGen,key);	}		// Get the next node from the iterator and do loop again...	final InstructionHandle skip = il.append(NOP);		il.append(methodGen.loadIterator());	il.append(methodGen.nextNode());	il.append(DUP);	il.append(methodGen.storeCurrentNode());	il.append(new IFNE(loop));	// Restore current node and current iterator from the stack	il.append(methodGen.storeIterator());	il.append(methodGen.storeCurrentNode());		nextNode.setTarget(skip);	skipNode.setTarget(skip);    }