docs: public Object evaluate() throws Exception
      {
          final ValueStack values = new ValueStack();
  
          if (rpn == null)
              return null;
  
          if (variablesThatExistedBeforePreviousEvaluation != null)
              for (final String varName : getSupport().getVariableNames())
              {
                  if (variablesThatExistedBeforePreviousEvaluation.contains(varName))
                      continue;
                  getSupport().removeVariable(varName);
              }
          /*
           * Save variable names that exist before the equation. If the equation
           * assigns values to variables then they will be new names.
           */
          variablesThatExistedBeforePreviousEvaluation = getSupport().getVariableNames();
  
          for (final Iterator<EquPart> parts = rpn.iterator(); parts.hasNext();)
          {
              final EquPart part = parts.next();
              part.setEqu(this);
              part.resolve(values);
          }
  
          if (values.isEmpty())
              return null;
  
          final Object result = values.firstElement();
          values.clear();
  
          return result;
      }