docs: public void normalizeOperandTypes_recurse() {
          // Depth first search for NUMERIC children.
          if (m_left != null) {
              m_left.normalizeOperandTypes_recurse();
          }
          if (m_right != null) {
              m_right.normalizeOperandTypes_recurse();
  
              // XXX: There's no check here that the Numeric operands are actually constants.
              // Can a sub-expression of type Numeric arise in any other case?
              // Would that case always be amenable to having its valueType/valueSize redefined here?
              if (m_left != null) {
                  if (m_left.m_valueType == VoltType.NUMERIC) {
                      m_left.refineOperandType(m_right.m_valueType);
                  }
                  if (m_right.m_valueType == VoltType.NUMERIC) {
                      m_right.refineOperandType(m_left.m_valueType);
                  }
              }
  
          }
          if (m_args != null) {
              for (AbstractExpression argument : m_args) {
                  argument.normalizeOperandTypes_recurse();
              }
          }
      }