docs: @Override
      public void resolve(final ValueStack values) throws Exception
      {
          if (values.size() < 1)
              throw new Exception("missing operand for " + toString());
          try
          {
              final long base = values.popLong();
  
              if (base > 20)
                  throw new Exception(toString() + "; " + "numeric overflow");
  
              if (base < 0)
                  throw new Exception(toString() + "; " + "negative numbers not allowed");
  
              long factorial = 1;
              for (int i = (int) base; i > 1; i--)
                  factorial *= i;
  
              values.push(new Long(factorial));
          } catch (final ParseException e)
          {
              e.fillInStackTrace();
              throw new Exception(toString() + "; " + e.getMessage(), e);
          }
      }