code: private JsonToken decodeLiteral() throws IOException {
          if (valuePos == -1) {
              // it was too long to fit in the buffer so it can only be a string
              return JsonToken.STRING;
          } else if (valueLength == 4
                  && ('n' == buffer[valuePos] || 'N' == buffer[valuePos])
                  && ('u' == buffer[valuePos + 1] || 'U' == buffer[valuePos + 1])
                  && ('l' == buffer[valuePos + 2] || 'L' == buffer[valuePos + 2])
                  && ('l' == buffer[valuePos + 3] || 'L' == buffer[valuePos + 3])) {
              value = "null";
              return JsonToken.NULL;
          } else if (valueLength == 4
                  && ('t' == buffer[valuePos] || 'T' == buffer[valuePos])
                  && ('r' == buffer[valuePos + 1] || 'R' == buffer[valuePos + 1])
                  && ('u' == buffer[valuePos + 2] || 'U' == buffer[valuePos + 2])
                  && ('e' == buffer[valuePos + 3] || 'E' == buffer[valuePos + 3])) {
              value = TRUE;
              return JsonToken.BOOLEAN;
          } else if (valueLength == 5
                  && ('f' == buffer[valuePos] || 'F' == buffer[valuePos])
                  && ('a' == buffer[valuePos + 1] || 'A' == buffer[valuePos + 1])
                  && ('l' == buffer[valuePos + 2] || 'L' == buffer[valuePos + 2])
                  && ('s' == buffer[valuePos + 3] || 'S' == buffer[valuePos + 3])
                  && ('e' == buffer[valuePos + 4] || 'E' == buffer[valuePos + 4])) {
              value = FALSE;
              return JsonToken.BOOLEAN;
          } else {
              value = stringPool.get(buffer, valuePos, valueLength);
              return decodeNumber(buffer, valuePos, valueLength);
          }
      }
docs: Assigns {@code nextToken} based on the value of {@code nextValue}.