         }
     }
 
+    /// Private: Return a Data containing the entirety of
+    /// the current field, including tag.
     private mutating func getRawField() throws -> Data {
         try skip()
         return Data(bytes: fieldStartP, count: fieldEndP! - fieldStartP)
     }
 
-    private mutating func decodeVarint() throws -> UInt64 {
-        return try getRawVarint()
-    }
-
+    /// Private: decode a fixed-length four-byte number.  This generic
+    /// helper handles all four-byte number types.
     private mutating func decodeFourByteNumber<T>(value: inout T) throws {
         guard available >= 4 else {throw DecodingError.truncatedInput}
         withUnsafeMutablePointer(to: &value) { ip -> Void in

        self.extensions = extensions
    }

    // Since this is called for every field, I've taken some
    // pains to optimize it, including unrolling a tweaked version
    // of the varint parser.
    public mutating func nextFieldNumber() throws -> Int? {
        if fieldNumber > 0 {
            if let override = unknownOverride {
                if unknownData == nil {

        }
    }

    /// Private: Skip to the end of the current field.
    ///
    /// Assumes that fieldStartP was bookmarked by a previous
    /// call to getTagType().
    ///
    /// On exit, fieldStartP points to the first byte of the tag, fieldEndP points
    /// to the first byte after the field contents, and p == fieldEndP.
    private mutating func skip() throws {
        if let end = fieldEndP {
            p = end
        } else {
            // Rewind to start of current field.
            available += p - fieldStartP
            p = fieldStartP
            guard let tag = try getTagWithoutUpdatingFieldStart() else {
