@@ -67,7 +67,7 @@ impl ProvenanceMap {
67
67
}
68
68
69
69
impl < Prov : Provenance > ProvenanceMap < Prov > {
70
- fn adjusted_range ( range : AllocRange , cx : & impl HasDataLayout ) -> Range < Size > {
70
+ fn adjusted_range_ptrs ( range : AllocRange , cx : & impl HasDataLayout ) -> Range < Size > {
71
71
// We have to go back `pointer_size - 1` bytes, as that one would still overlap with
72
72
// the beginning of this range.
73
73
let adjusted_start = Size :: from_bytes (
@@ -79,36 +79,36 @@ impl<Prov: Provenance> ProvenanceMap<Prov> {
79
79
/// Returns all ptr-sized provenance in the given range.
80
80
/// If the range has length 0, returns provenance that crosses the edge between `start-1` and
81
81
/// `start`.
82
- pub ( super ) fn range_get_ptrs (
82
+ pub ( super ) fn range_ptrs_get (
83
83
& self ,
84
84
range : AllocRange ,
85
85
cx : & impl HasDataLayout ,
86
86
) -> & [ ( Size , Prov ) ] {
87
- self . ptrs . range ( Self :: adjusted_range ( range, cx) )
87
+ self . ptrs . range ( Self :: adjusted_range_ptrs ( range, cx) )
88
88
}
89
89
90
- /// `pm.range_get_ptrs_is_empty(r, cx)` == `pm.range_get_ptrs(r, cx).is_empty()`, but is
91
- /// faster.
92
- pub ( super ) fn range_get_ptrs_is_empty (
93
- & self ,
94
- range : AllocRange ,
95
- cx : & impl HasDataLayout ,
96
- ) -> bool {
97
- self . ptrs . range_is_empty ( Self :: adjusted_range ( range, cx) )
90
+ /// `pm.range_ptrs_is_empty(r, cx)` == `pm.range_ptrs_get(r, cx).is_empty()`, but is faster.
91
+ pub ( super ) fn range_ptrs_is_empty ( & self , range : AllocRange , cx : & impl HasDataLayout ) -> bool {
92
+ self . ptrs . range_is_empty ( Self :: adjusted_range_ptrs ( range, cx) )
98
93
}
99
94
100
95
/// Returns all byte-wise provenance in the given range.
101
- fn range_get_bytes ( & self , range : AllocRange ) -> & [ ( Size , Prov ) ] {
96
+ fn range_bytes_get ( & self , range : AllocRange ) -> & [ ( Size , Prov ) ] {
102
97
if let Some ( bytes) = self . bytes . as_ref ( ) {
103
98
bytes. range ( range. start ..range. end ( ) )
104
99
} else {
105
100
& [ ]
106
101
}
107
102
}
108
103
104
+ /// Same as `range_bytes_get(range).is_empty()`, but faster.
105
+ fn range_bytes_is_empty ( & self , range : AllocRange ) -> bool {
106
+ self . bytes . as_ref ( ) . is_none_or ( |bytes| bytes. range_is_empty ( range. start ..range. end ( ) ) )
107
+ }
108
+
109
109
/// Get the provenance of a single byte.
110
110
pub fn get ( & self , offset : Size , cx : & impl HasDataLayout ) -> Option < Prov > {
111
- let prov = self . range_get_ptrs ( alloc_range ( offset, Size :: from_bytes ( 1 ) ) , cx) ;
111
+ let prov = self . range_ptrs_get ( alloc_range ( offset, Size :: from_bytes ( 1 ) ) , cx) ;
112
112
debug_assert ! ( prov. len( ) <= 1 ) ;
113
113
if let Some ( entry) = prov. first ( ) {
114
114
// If it overlaps with this byte, it is on this byte.
@@ -132,7 +132,7 @@ impl<Prov: Provenance> ProvenanceMap<Prov> {
132
132
/// limit access to provenance outside of the `Allocation` abstraction.
133
133
///
134
134
pub fn range_empty ( & self , range : AllocRange , cx : & impl HasDataLayout ) -> bool {
135
- self . range_get_ptrs_is_empty ( range, cx) && self . range_get_bytes ( range) . is_empty ( )
135
+ self . range_ptrs_is_empty ( range, cx) && self . range_bytes_is_empty ( range)
136
136
}
137
137
138
138
/// Yields all the provenances stored in this map.
@@ -164,14 +164,14 @@ impl<Prov: Provenance> ProvenanceMap<Prov> {
164
164
// provenance that overlaps with the given range.
165
165
let ( first, last) = {
166
166
// Find all provenance overlapping the given range.
167
- if self . range_get_ptrs_is_empty ( range, cx) {
167
+ if self . range_ptrs_is_empty ( range, cx) {
168
168
// No provenance in this range, we are done. This is the common case.
169
169
return Ok ( ( ) ) ;
170
170
}
171
171
172
172
// This redoes some of the work of `range_get_ptrs_is_empty`, but this path is much
173
173
// colder than the early return above, so it's worth it.
174
- let provenance = self . range_get_ptrs ( range, cx) ;
174
+ let provenance = self . range_ptrs_get ( range, cx) ;
175
175
(
176
176
provenance. first ( ) . unwrap ( ) . 0 ,
177
177
provenance. last ( ) . unwrap ( ) . 0 + cx. data_layout ( ) . pointer_size ,
@@ -284,8 +284,8 @@ impl<Prov: Provenance> ProvenanceMap<Prov> {
284
284
// This includes the existing bytewise provenance in the range, and ptr provenance
285
285
// that overlaps with the begin/end of the range.
286
286
let mut dest_bytes_box = None ;
287
- let begin_overlap = self . range_get_ptrs ( alloc_range ( src. start , Size :: ZERO ) , cx) . first ( ) ;
288
- let end_overlap = self . range_get_ptrs ( alloc_range ( src. end ( ) , Size :: ZERO ) , cx) . first ( ) ;
287
+ let begin_overlap = self . range_ptrs_get ( alloc_range ( src. start , Size :: ZERO ) , cx) . first ( ) ;
288
+ let end_overlap = self . range_ptrs_get ( alloc_range ( src. end ( ) , Size :: ZERO ) , cx) . first ( ) ;
289
289
if !Prov :: OFFSET_IS_ADDR {
290
290
// There can't be any bytewise provenance, and we cannot split up the begin/end overlap.
291
291
if let Some ( entry) = begin_overlap {
@@ -308,10 +308,10 @@ impl<Prov: Provenance> ProvenanceMap<Prov> {
308
308
} else {
309
309
trace ! ( "no start overlapping entry" ) ;
310
310
}
311
+
311
312
// Then the main part, bytewise provenance from `self.bytes`.
312
- if let Some ( all_bytes) = self . bytes . as_ref ( ) {
313
- bytes. extend ( all_bytes. range ( src. start ..src. end ( ) ) ) ;
314
- }
313
+ bytes. extend ( self . range_bytes_get ( src) ) ;
314
+
315
315
// And finally possibly parts of a pointer at the end.
316
316
if let Some ( entry) = end_overlap {
317
317
trace ! ( "end overlapping entry: {entry:?}" ) ;
0 commit comments