From 823c3b984541b13c2083b7bd8025d8d679a2c13b Mon Sep 17 00:00:00 2001 From: Andreas Molzer Date: Sat, 31 Aug 2019 17:01:56 +0200 Subject: [PATCH] Improve documentation around allocation accessors --- src/librustc/mir/interpret/allocation.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/librustc/mir/interpret/allocation.rs b/src/librustc/mir/interpret/allocation.rs index 8f47bf9d0fd..8e824aeb791 100644 --- a/src/librustc/mir/interpret/allocation.rs +++ b/src/librustc/mir/interpret/allocation.rs @@ -581,8 +581,10 @@ impl<'tcx, Tag, Extra> Allocation { /// Run-length encoding of the undef mask. /// Used to copy parts of a mask multiple times to another allocation. pub struct AllocationDefinedness { + /// The lengths of ranges that are run-length encoded. ranges: smallvec::SmallVec::<[u64; 1]>, - first: bool, + /// The definedness of the first range. + initial: bool, } /// Transferring the definedness mask to other allocations. @@ -606,9 +608,9 @@ impl Allocation { // where each element toggles the state let mut ranges = smallvec::SmallVec::<[u64; 1]>::new(); - let first = self.undef_mask.get(src.offset); + let initial = self.undef_mask.get(src.offset); let mut cur_len = 1; - let mut cur = first; + let mut cur = initial; for i in 1..size.bytes() { // FIXME: optimize to bitshift the current undef block's bits and read the top bit @@ -623,7 +625,7 @@ impl Allocation { ranges.push(cur_len); - AllocationDefinedness { ranges, first, } + AllocationDefinedness { ranges, initial, } } /// Apply multiple instances of the run-length encoding to the undef_mask. @@ -640,7 +642,7 @@ impl Allocation { self.undef_mask.set_range_inbounds( dest.offset, dest.offset + size * repeat, - defined.first, + defined.initial, ); return; } @@ -648,7 +650,7 @@ impl Allocation { for mut j in 0..repeat { j *= size.bytes(); j += dest.offset.bytes(); - let mut cur = defined.first; + let mut cur = defined.initial; for range in &defined.ranges { let old_j = j; j += range; @@ -725,9 +727,9 @@ impl Allocation { // shift offsets from source allocation to destination allocation offset + dest_offset - src.offset, reloc, - ) + ) }) - ); + ); } AllocationRelocations { @@ -735,6 +737,9 @@ impl Allocation { } } + /// Apply a relocation copy. + /// The affected range, as defined in the parameters to `prepare_relocation_copy` is expected + /// to be clear of relocations. pub fn mark_relocation_range( &mut self, relocations: AllocationRelocations,