@@ -87,7 +87,7 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
87
87
var inArray = false
88
88
var keys : [ IndexPathElement ] = [ " root " ]
89
89
var index : Int = - 1
90
- var edits : [ ( key: IndexPathElement , node: Node ) ] = [ ]
90
+ var edits : [ ( key: IndexPathElement , node: Node ? ) ] = [ ]
91
91
var node : NodeResult ? = . node( root)
92
92
var key : IndexPathElement ?
93
93
var parent : NodeResult ?
@@ -111,10 +111,15 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
111
111
let editKey = editKey. indexValue!
112
112
let arrayKey = editKey - editOffset
113
113
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
+ }
118
123
}
119
124
}
120
125
} else {
@@ -179,7 +184,7 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
179
184
continue
180
185
}
181
186
} else if case let . node( resultNode) = result {
182
- edits. append ( ( key!, resultNode! ) )
187
+ edits. append ( ( key!, resultNode) )
183
188
if !isLeaving {
184
189
if let resultNode = resultNode {
185
190
node = . node( resultNode)
@@ -216,8 +221,8 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
216
221
} while
217
222
stack != nil
218
223
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
221
226
}
222
227
223
228
return root
@@ -226,14 +231,14 @@ func visit(root: Node, visitor: Visitor, keyMap: [Kind: [String]] = [:]) -> Node
226
231
final class Stack {
227
232
let index : Int
228
233
let keys : [ IndexPathElement ]
229
- let edits : [ ( key: IndexPathElement , node: Node ) ]
234
+ let edits : [ ( key: IndexPathElement , node: Node ? ) ]
230
235
let inArray : Bool
231
236
let prev : Stack ?
232
237
233
238
init (
234
239
index: Int ,
235
240
keys: [ IndexPathElement ] ,
236
- edits: [ ( key: IndexPathElement , node: Node ) ] ,
241
+ edits: [ ( key: IndexPathElement , node: Node ? ) ] ,
237
242
inArray: Bool ,
238
243
prev: Stack ?
239
244
) {
0 commit comments