code: final void setBaseValue(long newBaseValue) {
          // set the base value
          baseValue = newBaseValue;
          radix = 10;
  
          // if this isn't a special rule, recalculate the radix and exponent
          // (the radix always defaults to 10; if it's supposed to be something
          // else, it's cleaned up by the caller and the exponent is
          // recalculated again-- the only function that does this is
          // NFRule.parseRuleDescriptor() )
          if (baseValue >= 1) {
              exponent = expectedExponent();
  
              // this function gets called on a fully-constructed rule whose
              // description didn't specify a base value.  This means it
              // has substitutions, and some substitutions hold on to copies
              // of the rule's divisor.  Fix their copies of the divisor.
              if (sub1 != null) {
                  sub1.setDivisor(radix, exponent);
              }
              if (sub2 != null) {
                  sub2.setDivisor(radix, exponent);
              }
          }
          else {
              // if this is a special rule, its radix and exponent are basically
              // ignored.  Set them to "safe" default values
              exponent = 0;
          }
      }
docs: Sets the rule's base value, and causes the radix and exponent
  to be recalculated.  This is used during construction when we
  don't know the rule's base value until after it's been
  constructed.  It should not be used at any other time.
  @param newBaseValue The new base value for the rule.