From e52d4856eeaa795c11c5550a0025766c22392a53 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 16 Jan 2026 22:31:43 +0000 Subject: [PATCH] amend recalculation of size metadata in 'PersistentVector.splitRIght: we always want to decrement by prevSize in this function. (We will have another function call to decrement so that left split and right split represent the same absolute indices when they are joined, before they are split.) --- fcore/persistent-vector.sml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fcore/persistent-vector.sml b/fcore/persistent-vector.sml index 489b692..a7f7989 100644 --- a/fcore/persistent-vector.sml +++ b/fcore/persistent-vector.sml @@ -443,7 +443,7 @@ struct else let val nodes = VectorSlice.vector nodesSlice - val sizes = VectorSlice.map (fn el => el - prevSize) sizesSlice + val sizes = VectorSlice.map (fn el => el - oldChildSize) sizesSlice in BRANCH (nodes, sizes) end @@ -487,11 +487,16 @@ struct empty else let + val prevSize = + if idx > 0 then + Vector.sub (sizes, idx - 1) + else + 0 val len = Vector.length items - idx val itemsSlice = VectorSlice.slice (items, idx, SOME len) val items = VectorSlice.map (fn {start, finish} => - {start = start - splitIdx, finish = finish - splitIdx} + {start = start - prevSize, finish = finish - prevSize} ) itemsSlice val sizes = Vector.map #finish items