anchor.diff:        if (smi < 1000000) return 6;
         return 7;
       }
  -    if (smi < _POW_10_10) {
  -      if (smi < _POW_10_8) return 8;
  -      if (smi < _POW_10_9) return 9;
  -      return 10;
  -    }
  -    smi = smi ~/ _POW_10_10;
  -    if (smi < 10) return 11;
  -    if (smi < 100) return 12;
  -    return 10 + _positiveBase10Length(smi);
  +    if (smi < _POW_10_8) return 8;
  +    if (smi < _POW_10_9) return 9;
  +    smi = smi ~/ _POW_10_9;
  +    // Handle numbers < 100 before calling recursively.
  +    if (smi < 10) return 10;
  +    if (smi < 100) return 11;
  +    return 9 + _positiveBase10Length(smi);
     }
   
     String toString() {
  
positive.code:       if (negSmi > -1000000) return 6;
        return 7;
      }
      if (negSmi > -_POW_10_10) {
        if (negSmi > -_POW_10_8) return 8;
        if (negSmi > -_POW_10_9) return 9;
        return 10;
      }
      negSmi = negSmi ~/ _POW_10_10;
      if (negSmi > -10) return 11;
      if (negSmi > -100) return 12;
      return 10 + _negativeBase10Length(negSmi);
    }
  
    // Convert a negative smi to a string.
  
negative.code:   }
  
    // Find the number of decimal digits in a negative smi.
    // Never called with numbers > -100. These are handled before calling.
    static int _negativeBase10Length(var negSmi) {
      // A negative smi has length <= 19 if 63-bit, <=10 if 31-bit.
      // Avoid comparing a 31-bit smi to a non-smi.
  