@@ -87,7 +87,7 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
8787 var inArray = false
8888 var keys : [ IndexPathElement ] = [ " root " ]
8989 var index : Int = - 1
90- var edits : [ ( key: IndexPathElement , node: Node ) ] = [ ]
90+ var edits : [ ( key: IndexPathElement , node: Node ? ) ] = [ ]
9191 var node : NodeResult ? = . node( root)
9292 var key : IndexPathElement ?
9393 var parent : NodeResult ?
@@ -111,10 +111,15 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
111111 let editKey = editKey. indexValue!
112112 let arrayKey = editKey - editOffset
113113
114- if case . array( var n) = node {
115- n. remove ( at: arrayKey)
116- node = . array( n)
117- editOffset += 1
114+ if case var . array( n) = node {
115+ if let editValue = editValue {
116+ n [ arrayKey] = editValue
117+ node = . array( n)
118+ } else {
119+ n. remove ( at: arrayKey)
120+ node = . array( n)
121+ editOffset += 1
122+ }
118123 }
119124 }
120125 } else {
@@ -179,7 +184,7 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
179184 continue
180185 }
181186 } else if case let . node( resultNode) = result {
182- edits. append ( ( key!, resultNode! ) )
187+ edits. append ( ( key!, resultNode) )
183188 if !isLeaving {
184189 if let resultNode = resultNode {
185190 node = . node( resultNode)
@@ -216,8 +221,8 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
216221 } while
217222 stack != nil
218223
219- if !edits. isEmpty {
220- return edits [ edits . count - 1 ] . node
224+ if !edits. isEmpty, let nextEditNode = edits [ edits . count - 1 ] . node {
225+ return nextEditNode
221226 }
222227
223228 return root
@@ -226,14 +231,14 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
226231final class Stack {
227232 let index : Int
228233 let keys : [ IndexPathElement ]
229- let edits : [ ( key: IndexPathElement , node: Node ) ]
234+ let edits : [ ( key: IndexPathElement , node: Node ? ) ]
230235 let inArray : Bool
231236 let prev : Stack ?
232237
233238 init (
234239 index: Int ,
235240 keys: [ IndexPathElement ] ,
236- edits: [ ( key: IndexPathElement , node: Node ) ] ,
241+ edits: [ ( key: IndexPathElement , node: Node ? ) ] ,
237242 inArray: Bool ,
238243 prev: Stack ?
239244 ) {
0 commit comments