The old $vector-copy! could use $ptr-copy!, which doesn't have an associated write barrier. As a result, using $vector-copy! at the end of vector-sort! is incorrect.
The new test is arranges for one half of a vector to have generation-0 objects and the other to have immediate objects; the two halves are already sorted, so they end up being swapped via a temporary vector and $vector-copy!. As a result, a collection afterward can fail to scan the half of the original vector that it should scan.
The solution here is to rename the internal $vector-copy! function to $vector-fill-copy! (by analogy to $stencil-vector-fill-set!) and use keep using it for things like vector-copy. But the new $vector-copy! as used by vector-sort! avoids $ptr-copy!.
The old
$vector-copy!
could use$ptr-copy!
, which doesn't have an associated write barrier. As a result, using$vector-copy!
at the end ofvector-sort!
is incorrect.The new test is arranges for one half of a vector to have generation-0 objects and the other to have immediate objects; the two halves are already sorted, so they end up being swapped via a temporary vector and
$vector-copy!
. As a result, a collection afterward can fail to scan the half of the original vector that it should scan.The solution here is to rename the internal
$vector-copy!
function to$vector-fill-copy!
(by analogy to$stencil-vector-fill-set!
) and use keep using it for things likevector-copy
. But the new$vector-copy!
as used byvector-sort!
avoids$ptr-copy!
.