@@ -16,32 +16,27 @@ import Foundation
1616
1717internal struct JSONDecoder : Decoder {
1818 internal var scanner : JSONScanner
19- internal var options : JSONDecodingOptions
20- internal var extensions : ExtensionMap
2119 internal var messageType : Message . Type
2220 private var fieldCount = 0
2321 private var isMapKey = false
2422 private var fieldNameMap : _NameMap ?
2523
24+ internal var options : JSONDecodingOptions { scanner. options }
25+
2626 mutating func handleConflictingOneOf( ) throws {
2727 throw JSONDecodingError . conflictingOneOf
2828 }
2929
3030 internal init ( source: UnsafeRawBufferPointer , options: JSONDecodingOptions ,
3131 messageType: Message . Type , extensions: ExtensionMap ) {
32- self . options = options
33- self . scanner = JSONScanner ( source: source,
34- messageDepthLimit: self . options. messageDepthLimit,
35- ignoreUnknownFields: self . options. ignoreUnknownFields)
36- self . messageType = messageType
37- self . extensions = extensions
32+ let scanner = JSONScanner ( source: source,
33+ options: options,
34+ extensions: extensions)
35+ self . init ( scanner: scanner, messageType: messageType)
3836 }
3937
40- private init ( decoder: JSONDecoder , messageType: Message . Type ) {
41- // The scanner is copied over along with the options.
42- self . scanner = decoder. scanner
43- self . options = decoder. options
44- self . extensions = decoder. extensions
38+ private init ( scanner: JSONScanner , messageType: Message . Type ) {
39+ self . scanner = scanner
4540 self . messageType = messageType
4641 }
4742
@@ -53,8 +48,7 @@ internal struct JSONDecoder: Decoder {
5348 try scanner. skipRequiredComma ( )
5449 }
5550 let fieldNumber = try scanner. nextFieldNumber ( names: fieldNameMap!,
56- messageType: messageType,
57- extensionMap: extensions)
51+ messageType: messageType)
5852 if let fieldNumber = fieldNumber {
5953 fieldCount += 1
6054 return fieldNumber
@@ -539,7 +533,7 @@ internal struct JSONDecoder: Decoder {
539533 if value == nil {
540534 value = M ( )
541535 }
542- var subDecoder = JSONDecoder ( decoder : self , messageType: M . self)
536+ var subDecoder = JSONDecoder ( scanner : scanner , messageType: M . self)
543537 try subDecoder. decodeFullObject ( message: & value!)
544538 assert ( scanner. recursionBudget == subDecoder. scanner. recursionBudget)
545539 scanner = subDecoder. scanner
@@ -570,7 +564,7 @@ internal struct JSONDecoder: Decoder {
570564 }
571565 } else {
572566 var message = M ( )
573- var subDecoder = JSONDecoder ( decoder : self , messageType: M . self)
567+ var subDecoder = JSONDecoder ( scanner : scanner , messageType: M . self)
574568 try subDecoder. decodeFullObject ( message: & message)
575569 value. append ( message)
576570 assert ( scanner. recursionBudget == subDecoder. scanner. recursionBudget)
@@ -708,7 +702,7 @@ internal struct JSONDecoder: Decoder {
708702 fieldNumber: Int
709703 ) throws {
710704 // Force-unwrap: we can only get here if the extension exists.
711- let ext = extensions [ messageType, fieldNumber] !
705+ let ext = scanner . extensions [ messageType, fieldNumber] !
712706
713707 var fieldValue = values [ fieldNumber]
714708 if fieldValue != nil {
0 commit comments