Merge "Remove the `fill` in `SlotTable.moveSlotGapTo()` and move it to close" into androidx-main
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
index 624d885e..02a9933 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
@@ -472,6 +472,13 @@
}
}
+ // Verify that slot gap contains all nulls
+ for (index in slotsSize until slots.size) {
+ check(slots[index] == null) {
+ "Non null value in the slot gap at index $index"
+ }
+ }
+
// Verify anchors are well-formed
var lastLocation = -1
anchors.fastForEach { anchor ->
@@ -1332,6 +1339,7 @@
// Only reset the writer if it closes normally.
moveGroupGapTo(size)
moveSlotGapTo(slots.size - slotsGapLen, groupGapStart)
+ clearSlotGap()
recalculateMarks()
}
table.close(
@@ -2495,9 +2503,6 @@
endIndex = index + gapLen
)
}
-
- // Clear the gap in the data array
- slots.fill(null, index, index + gapLen)
}
// Update the data anchors affected by the move
@@ -2535,6 +2540,12 @@
this.slotsGapStart = index
}
+ private fun clearSlotGap() {
+ val slotsGapStart = slotsGapStart
+ val slotsGapEnd = slotsGapStart + slotsGapLen
+ slots.fill(null, slotsGapStart, slotsGapEnd)
+ }
+
/**
* Insert [size] number of groups in front of [currentGroup]. These groups are implicitly a
* child of [parent].