docs: private char readEscapeCharacter() throws IOException {
      if (!source.request(1)) {
        throw syntaxError("Unterminated escape sequence");
      }
  
      byte escaped = buffer.readByte();
      switch (escaped) {
        case 'u':
          if (!source.request(4)) {
            throw new EOFException("Unterminated escape sequence at path " + getPath());
          }
          // Equivalent to Integer.parseInt(stringPool.get(buffer, pos, 4), 16);
          char result = 0;
          for (int i = 0, end = i + 4; i < end; i++) {
            byte c = buffer.getByte(i);
            result <<= 4;
            if (c >= '0' && c <= '9') {
              result += (c - '0');
            } else if (c >= 'a' && c <= 'f') {
              result += (c - 'a' + 10);
            } else if (c >= 'A' && c <= 'F') {
              result += (c - 'A' + 10);
            } else {
              throw syntaxError("\\u" + buffer.readUtf8(4));
            }
          }
          buffer.skip(4);
          return result;
  
        case 't':
          return '\t';
  
        case 'b':
          return '\b';
  
        case 'n':
          return '\n';
  
        case 'r':
          return '\r';
  
        case 'f':
          return '\f';
  
        case '\n':
        case '\'':
        case '"':
        case '\\':
        case '/':
          return (char) escaped;
  
        default:
          if (!lenient) throw syntaxError("Invalid escape sequence: \\" + (char) escaped);
          return (char) escaped;
      }
    }