code: private Expression compileExtension(int opPos)
            throws TransformerException
    {
  
      int endExtFunc = opPos + getOp(opPos + 1) - 1;
  
      opPos = getFirstChildPos(opPos);
  
      java.lang.String ns = (java.lang.String) getTokenQueue().elementAt(getOp(opPos));
  
      opPos++;
  
      java.lang.String funcName =
        (java.lang.String) getTokenQueue().elementAt(getOp(opPos));
  
      opPos++;
  
      // We create a method key to uniquely identify this function so that we
      // can cache the object needed to invoke it.  This way, we only pay the
      // reflection overhead on the first call.
  
      Function extension = new FuncExtFunction(ns, funcName, String.valueOf(getNextMethodId()));
  
      try
      {
        int i = 0;
  
        while (opPos < endExtFunc)
        {
          int nextOpPos = getNextOpPos(opPos);
  
          extension.setArg(this.compile(opPos), i);
  
          opPos = nextOpPos;
  
          i++;
        }
      }
      catch (WrongNumberArgsException wnae)
      {
        ;  // should never happen
      }
  
      return extension;
    }
docs: Compile an extension function.
  
  @param opPos The current position in the m_opMap array.
  
  @return reference to {@link org.apache.xpath.functions.FuncExtFunction} instance.
  
  @throws TransformerException if a error occurs creating the Expression.