anchor.diff:      final int hashPattern = _HashBase._hashPattern(fullHash, _hashMask, size);
       int i = _HashBase._firstProbe(fullHash, sizeMask);
       int pair = _index[i];
  -    int probeDistance = 1;
       while (pair != _HashBase._UNUSED_PAIR) {
         if (pair != _HashBase._DELETED_PAIR) {
           final int entry = hashPattern ^ pair;
  
positive.code:   }
  
    void _createIndex() {
      // Because we use quadratic (actually triangle number) probing it is
      // important that the size is a power of two (otherwise we could fail to
      // find an empty slot).  This is described in Knuth's The Art of Computer
      // Programming Volume 2, Chapter 6.4, exercise 20 (solution in the
      // appendix, 2nd edition).
      final size = _roundUpToPowerOfTwo(
          max(_data.length * 2, _HashBase._INITIAL_INDEX_SIZE));
      final index = new Uint32List(size);
  
negative.code:     return (maskedHash == 0) ? (size >> 1) : maskedHash * (size >> 1);
    }
  
    // Linear probing.
    static int _firstProbe(int fullHash, int sizeMask) {
      final int i = fullHash & sizeMask;
      // Light, fast shuffle to mitigate bad hashCode (e.g., sequential).
      return ((i << 1) + i) & sizeMask;
    }
  
    static int _nextProbe(int i, int sizeMask) => (i + 1) & sizeMask;
  
    // A self-loop is used to mark a deleted key or value.
    static bool _isDeleted(List<Object?> data, Object? keyOrValue) =>
  