anchor.diff:    // is slightly less efficient than just getting the next name in a series,
     // but it means that small changes in the input program will give smallish
     // changes in the output, which can be useful for diffing etc.
  -  String _getUnusedName(String proposedName, Set<String> usedNames) {
  +  String _getUnusedName(String proposedName, Set<String> usedNames,
  +                        Iterable<String> suggestions) {
       int hash = _calculateHash(proposedName);
       // Avoid very small hashes that won't try many names.
       hash = hash < 1000 ? hash * 314159 : hash;  // Yes, it's prime.
  
positive.code:     return h;
    }
  
    int _letterNumber(int x) {
      if (x >= ALPHABET_CHARACTERS) x %= ALPHABET_CHARACTERS;
      if (x < 26) return $a + x;
  
negative.code:         final candidate = new String.fromCharCodes(codes);
          if (!usedNames.contains(candidate) &&
              !jsReserved.contains(candidate) &&
              !_hasBannedPrefix(candidate) &&
              (n != 1 || !suggestions.contains(candidate))) {
            return candidate;
          }
          // Try again with a slightly different hash.  After around 10 turns
  