Remove allocation for builder cache hits #40
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Credit to @simonvandel over at the main rowan repository for pointing out how this is possible.
Draft proof of concept includes many problematic corners that make this not mergeable:
vec::Drain::as_slice(Tracking issue for slice::IterMut::as_slice and vec::Drain::as_slice rust-lang/rust#58957)ptr-unionwrangling ingreen/builder.rsthat shouldn't need to be therefn Union2::as_untagged_ptrrather than unpacking the uniontrait AsSliceis a hack to accept theas_slice-having by-value iteratorsAsRef<[T]>is probably the correct bound hereIntoIteratorrather thanIteratordirectlyIntobound is nice but unnecessaryas_slice/RandomAccessIteratorand performs the old behavior of collecting into a provisional nodematch(though not as nice asmatch match match)