return trailingSlashConsumed;
  protected void AbbreviatedNodeTestStep() throws javax.xml.transform.TransformerException  {    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];    int axesType;    // The next blocks guarantee that a MATCH_XXX will be added.    int matchTypePos = -1;    if (tokenIs('@'))    {      axesType = OpCodes.MATCH_ATTRIBUTE;      appendOp(2, axesType);      nextToken();    }    else if (this.lookahead("::", 1))    {      if (tokenIs("attribute"))      {        axesType = OpCodes.MATCH_ATTRIBUTE;        appendOp(2, axesType);      }      else if (tokenIs("child"))      {        axesType = OpCodes.MATCH_IMMEDIATE_ANCESTOR;        appendOp(2, axesType);      }      else      {        axesType = -1;        this.error(XPATHErrorResources.ER_AXES_NOT_ALLOWED,                   new Object[]{ this.m_token });      }      nextToken();      nextToken();    }    else if (tokenIs('/'))    {      axesType = OpCodes.MATCH_ANY_ANCESTOR;      appendOp(2, axesType);      nextToken();    }    else    {      if (tokenIs('/'))      {        nextToken();      }      matchTypePos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];      axesType = OpCodes.MATCH_IMMEDIATE_ANCESTOR;      appendOp(2, axesType);    }    // Make room for telling how long the step is without the predicate    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;    NodeTest(axesType);    // Tell how long the step is without the predicate    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH + 1] =      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;    while (tokenIs('['))    {      Predicate();    }    if ((matchTypePos > -1) && tokenIs('/') && lookahead('/', 1))    {      m_ops.m_opMap[matchTypePos] = OpCodes.MATCH_ANY_ANCESTOR;      nextToken();    }    // Tell how long the entire step is.    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;  }