File tree Expand file tree Collapse file tree 1 file changed +5
-3
lines changed
core/commonMain/src/implementations/immutableSet Expand file tree Collapse file tree 1 file changed +5
-3
lines changed Original file line number Diff line number Diff line change @@ -139,8 +139,6 @@ internal class TrieNode<E>(
139
139
140
140
/* * The given [newNode] must not be a part of any persistent set instance. */
141
141
private fun mutableUpdateNodeAtIndex (nodeIndex : Int , newNode : TrieNode <E >, owner : MutabilityOwnership ): TrieNode <E > {
142
- // assert(buffer[nodeIndex] !== newNode)
143
-
144
142
val cell: Any?
145
143
146
144
val newNodeBuffer = newNode.buffer
@@ -832,7 +830,11 @@ internal class TrieNode<E>(
832
830
} else {
833
831
targetNode.mutableRemove(elementHash, element, shift + LOG_MAX_BRANCHING_FACTOR , mutator)
834
832
}
835
- if (ownedBy == = mutator.ownership || targetNode != = newNode) {
833
+ // If newNode is a single-element node, it is newly created, or targetNode is owned by mutator and a cell was removed in-place.
834
+ // Otherwise the single element would have been lifted up.
835
+ // If targetNode is owned by mutator, this node is also owned by mutator. Thus no new node will be created to replace this node.
836
+ // If newNode !== targetNode, it is newly created.
837
+ if (targetNode.ownedBy == = mutator.ownership || targetNode != = newNode) {
836
838
return mutableUpdateNodeAtIndex(cellIndex, newNode, mutator.ownership)
837
839
}
838
840
return this
You can’t perform that action at this time.
0 commit comments