mirror of
https://github.com/neovim/neovim.git
synced 2025-12-10 16:42:42 +00:00
Merge pull request #14719 from snezhniylis/marktree_delete_node_iter_fix
Fix deletable nodes in MarkTree sometimes getting skipped
This commit is contained in:
@@ -356,6 +356,7 @@ void marktree_del_itr(MarkTree *b, MarkTreeIter *itr, bool rev)
|
|||||||
y = y->level ? y->ptr[0] : NULL;
|
y = y->level ? y->ptr[0] : NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
itr->i--;
|
||||||
}
|
}
|
||||||
|
|
||||||
b->n_keys--;
|
b->n_keys--;
|
||||||
|
|||||||
@@ -186,5 +186,20 @@ describe('marktree', function()
|
|||||||
lib.marktree_check(tree)
|
lib.marktree_check(tree)
|
||||||
shadoworder(tree, shadow, iter2)
|
shadoworder(tree, shadow, iter2)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Check iterator validity for 2 specific edge cases:
|
||||||
|
-- https://github.com/neovim/neovim/pull/14719
|
||||||
|
lib.marktree_clear(tree)
|
||||||
|
for i = 1,20 do
|
||||||
|
lib.marktree_put(tree, i, i, false)
|
||||||
|
end
|
||||||
|
|
||||||
|
lib.marktree_itr_get(tree, 10, 10, iter)
|
||||||
|
lib.marktree_del_itr(tree, iter, false)
|
||||||
|
eq(11, iter[0].node.key[iter[0].i].pos.col)
|
||||||
|
|
||||||
|
lib.marktree_itr_get(tree, 11, 11, iter)
|
||||||
|
lib.marktree_del_itr(tree, iter, false)
|
||||||
|
eq(12, iter[0].node.key[iter[0].i].pos.col)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
Reference in New Issue
Block a user