pattern = new StepPattern(getWhatToShow(startOpPos),
pattern = new AncestorStepPattern(getWhatToShow(startOpPos),
  protected StepPattern stepPattern(int opPos, int stepCount, StepPattern ancestorPattern)     throws org.xml.sax.SAXException  {        int startOpPos = opPos;    int stepType = getOpMap()[opPos];    if(OpCodes.ENDOP == stepType)      return null;        int endStep = getNextOpPos(opPos);    // int nextStepType = getOpMap()[endStep];        StepPattern pattern;    // boolean isSimple = ((OpCodes.ENDOP == nextStepType) && (stepCount == 0));        int argLen;    switch(stepType)    {    case OpCodes.OP_FUNCTION:      argLen = m_opMap[opPos+OpMap.MAPINDEX_LENGTH];      pattern = new FunctionPattern(compileFunction(opPos));      break;          case OpCodes.FROM_ROOT:      argLen = getArgLengthOfStep(opPos);      opPos = getFirstChildPosOfStep(opPos);      pattern = new StepPattern(NodeFilter.SHOW_DOCUMENT);      break;          case OpCodes.MATCH_ATTRIBUTE:      argLen = getArgLengthOfStep(opPos);      opPos = getFirstChildPosOfStep(opPos);      pattern = new StepPattern(NodeFilter.SHOW_ATTRIBUTE,                                 getStepNS(startOpPos),                                 getStepLocalName(startOpPos));      break;    case OpCodes.MATCH_ANY_ANCESTOR:      argLen = getArgLengthOfStep(opPos);      opPos = getFirstChildPosOfStep(opPos);      pattern = new StepPattern(getWhatToShow(startOpPos),                                 getStepNS(startOpPos),                                 getStepLocalName(startOpPos));      break;          case OpCodes.MATCH_IMMEDIATE_ANCESTOR:      argLen = getArgLengthOfStep(opPos);      opPos = getFirstChildPosOfStep(opPos);      pattern = new StepPattern(getWhatToShow(startOpPos),                                 getStepNS(startOpPos),                                 getStepLocalName(startOpPos));      break;          default:      error(XPATHErrorResources.ER_UNKNOWN_MATCH_OPERATION, null); //"unknown match operation!");      return null;    }        pattern.setPredicates(getCompiledPredicates(opPos + argLen));    pattern.setRelativePathPattern(ancestorPattern);        StepPattern relativePathPattern = stepPattern(endStep, stepCount+1, pattern);            return (null != relativePathPattern) ? relativePathPattern : pattern;  }