anchor.diff:      _value = 0;
       _expectedUnits = 0;
       _extraUnits = 0;
  -
  -    void addSingleBytes(int from, int to) {
  -      assert(from >= startIndex && from <= endIndex);
  -      assert(to >= startIndex && to <= endIndex);
  -      _stringSink.write(String.fromCharCodes(codeUnits, from, to));
  -    }
   
       var i = startIndex;
       loop:
  
positive.code:         var oneBytes = _scanOneByteCharacters(codeUnits, i, endIndex);
          if (oneBytes > 0) {
            _isFirstCharacter = false;
            addSingleBytes(i, i + oneBytes);
            i += oneBytes;
            if (i == endIndex) break;
          }
  
negative.code: 
      var length = codeUnits.length;
      end = RangeError.checkValidRange(start, end, length);
  
      // Fast case for ASCII strings avoids StringBuffer/_Utf8Decoder.
      int oneBytes = _scanOneByteCharacters(codeUnits, start, end);
      StringBuffer buffer;
      bool isFirstCharacter = true;
      if (oneBytes > 0) {
        var firstPart = String.fromCharCodes(codeUnits, start, start + oneBytes);
        start += oneBytes;
        if (start == end) {
          return firstPart;
        }
        buffer = StringBuffer(firstPart);
        isFirstCharacter = false;
      }
  
      buffer ??= StringBuffer();
      var decoder = _Utf8Decoder(buffer, _allowMalformed);
      decoder._isFirstCharacter = isFirstCharacter;
      decoder.convert(codeUnits, start, end);
      decoder.flush(codeUnits, end);
      return buffer.toString();
  