in lib/src/percent/encoder.dart [58:107]
String _convert(List<int> bytes, int start, int end) {
var buffer = StringBuffer();
// A bitwise OR of all bytes in [bytes]. This allows us to check for
// out-of-range bytes without adding more branches than necessary to the
// core loop.
var byteOr = 0;
for (var i = start; i < end; i++) {
var byte = bytes[i];
byteOr |= byte;
// If the byte is an uppercase letter, convert it to lowercase to check if
// it's unreserved. This works because uppercase letters in ASCII are
// exactly `0b100000 = 0x20` less than lowercase letters, so if we ensure
// that that bit is 1 we ensure that the letter is lowercase.
var letter = 0x20 | byte;
if ((letter >= $a && letter <= $z) ||
(byte >= $0 && byte <= $9) ||
byte == $dash ||
byte == $dot ||
byte == $underscore ||
byte == $tilde) {
// Unreserved characters are safe to write as-is.
buffer.writeCharCode(byte);
continue;
}
buffer.writeCharCode($percent);
// The bitwise arithmetic here is equivalent to `byte ~/ 16` and `byte % 16`
// for valid byte values, but is easier for dart2js to optimize given that
// it can't prove that [byte] will always be positive.
buffer.writeCharCode(_codeUnitForDigit((byte & 0xF0) >> 4));
buffer.writeCharCode(_codeUnitForDigit(byte & 0x0F));
}
if (byteOr >= 0 && byteOr <= 255) return buffer.toString();
// If there was an invalid byte, find it and throw an exception.
for (var i = start; i < end; i++) {
var byte = bytes[i];
if (byte >= 0 && byte <= 0xff) continue;
throw FormatException(
"Invalid byte ${byte < 0 ? "-" : ""}0x${byte.abs().toRadixString(16)}.",
bytes,
i);
}
throw 'unreachable';
}