           return n
         }
       }
-    } else if let s = try parseBareSInt(source: source,
-                                        index: &index,
-                                        end: source.endIndex) {
+    } else if let s = try parseBareSInt64(source: source,
+                                          index: &index,
+                                          end: source.endIndex) {
       return s
     }
     throw JSONDecodingError.malformedNumber

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

      if digit < asciiZero || digit > asciiNine {
        throw JSONDecodingError.malformedNumber
      }
      if let n = try parseBareUInt64(source: source, index: &index, end: end) {
        let limit: UInt64 = 0x8000000000000000 // -Int64.min
        if n >= limit {
          if n > limit {
