code: public void setArg(Expression arg, int argNum)
            throws WrongNumberArgsException
    {
  
      if (argNum < 3)
        super.setArg(arg, argNum);
      else
      {
        if (null == m_args)
        {
          m_args = new Expression[1];
          m_args[0] = arg;
        }
        else
        {
  
          // Slow but space conservative.
          Expression[] args = new Expression[m_args.length + 1];
  
          System.arraycopy(m_args, 0, args, 0, m_args.length);
  
          args[m_args.length] = arg;
          m_args = args;
        }
        arg.exprSetParent(this);
      }
    }
docs: Set an argument expression for a function.  This method is called by the
  XPath compiler.
  
  @param arg non-null expression that represents the argument.
  @param argNum The argument number index.
  
  @throws WrongNumberArgsException If a derived class determines that the
  number of arguments is incorrect.