 
   // Parse the leading UInt64 from the provided utf8 bytes.
   //
-  // This usually does a direct conversion of utf8 to UInt64.  It is
-  // called for both unquoted numbers and for numbers stored in quoted
-  // strings.  In the latter case, the caller is responsible for
-  // consuming the leading quote and verifying the trailing quote.
+  // This is called in three different situations:
   //
-  // If the number is in floating-point format, this uses a slower
-  // and less accurate approach: it identifies a substring comprising
-  // a float, and then uses Double() and UInt64() to convert that
-  // string to an unsigned intger.
+  // * Unquoted number.
+  //
+  // * Simple quoted number.  If a number is quoted but has no
+  //   backslashes, the caller can use this directly on the UTF8 by
+  //   just verifying the quote marks.  This code returns `nil` if it
+  //   sees a backslash, in which case the caller will need to handle ...
+  //
+  // * Complex quoted number.  In this case, the caller must parse the
+  //   quoted value as a string, then convert the string to utf8 and
+  //   use this to parse the result.  This is slow but fortunately
+  //   rare.
+  //
+  // In the common case where the number is written in integer form,
+  // this code does a simple straight conversion.  If the number is in
+  // floating-point format, this uses a slower and less accurate
+  // approach: it identifies a substring comprising a float, and then
+  // uses Double() and UInt64() to convert that string to an unsigned
+  // integer.  In particular, it cannot preserve full 64-bit integer
+  // values when they are written in floating-point format.
   //
   // If it encounters a "\" backslash character, it returns a nil.  This
   // is used by callers that are parsing quoted numbers.  See nextSInt()
   // and nextUInt() below.
-  private func parseBareUInt(
+  private func parseBareUInt64(
     source: UnsafeBufferPointer<UInt8>,
     index: inout UnsafeBufferPointer<UInt8>.Index,
     end: UnsafeBufferPointer<UInt8>.Index

      } else {
        return nil
      }
    } else if let n = try parseBareUInt(source: source, index: &index, end: end) {
      if n > UInt64(bitPattern: Int64.max) {
        throw JSONDecodingError.numberRange
      }

    if c == asciiDoubleQuote {
      let start = index
      advance()
      if let u = try parseBareUInt64(source: source,
                                     index: &index,
                                     end: source.endIndex) {
        guard hasMoreContent else {
          throw JSONDecodingError.truncated
        }
