code: public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException
    {
     
      SubContextList subContextList = xctxt.getCurrentNodeList();
      int currentNode = DTM.NULL;
  
      if (null != subContextList) {
          if (subContextList instanceof PredicatedNodeTest) {
              LocPathIterator iter = ((PredicatedNodeTest)subContextList)
                                                            .getLocPathIterator();
              currentNode = iter.getCurrentContextNode();
           } else if(subContextList instanceof StepPattern) {
             throw new RuntimeException(XSLMessages.createMessage(
                XSLTErrorResources.ER_PROCESSOR_ERROR,null));
           }
      } else {
          // not predicate => ContextNode == CurrentNode
          currentNode = xctxt.getContextNode();
      }
      return new XNodeSet(currentNode, xctxt.getDTMManager());
    }
docs: Execute the function.  The function must return
  a valid object.
  @param xctxt The current execution context.
  @return A valid XObject.
  
  @throws javax.xml.transform.TransformerException