1
Fork 0

add with_start and with_end

This commit is contained in:
Andreas Liljeqvist 2021-08-23 15:44:56 +02:00
parent d230b92ba7
commit 32d7e5b723
2 changed files with 14 additions and 6 deletions

View file

@ -529,7 +529,7 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
}),
ty::FnPtr(_) => {
let mut ptr = scalar_unit(Pointer);
ptr.valid_range = WrappingRange { start: 1, end: ptr.valid_range.end };
ptr.valid_range = ptr.valid_range.with_start(1);
tcx.intern_layout(Layout::scalar(self, ptr))
}
@ -547,8 +547,7 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
ty::Ref(_, pointee, _) | ty::RawPtr(ty::TypeAndMut { ty: pointee, .. }) => {
let mut data_ptr = scalar_unit(Pointer);
if !ty.is_unsafe_ptr() {
data_ptr.valid_range =
WrappingRange { start: 1, end: data_ptr.valid_range.end };
data_ptr.valid_range = data_ptr.valid_range.with_start(1);
}
let pointee = tcx.normalize_erasing_regions(param_env, pointee);
@ -564,8 +563,7 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
ty::Slice(_) | ty::Str => scalar_unit(Int(dl.ptr_sized_integer(), false)),
ty::Dynamic(..) => {
let mut vtable = scalar_unit(Pointer);
vtable.valid_range =
WrappingRange { start: 1, end: vtable.valid_range.end };
vtable.valid_range = vtable.valid_range.with_start(1);
vtable
}
_ => return Err(LayoutError::Unknown(unsized_part)),

View file

@ -712,6 +712,16 @@ impl WrappingRange {
pub fn contains_zero(&self) -> bool {
!(self.start <= self.end && self.start != 0)
}
/// Returns new `WrappingRange` with replaced `start`
pub fn with_start(&self, start: u128) -> Self {
Self { start, end: self.end }
}
/// Returns new `WrappingRange` with replaced `end`
pub fn with_end(&self, end: u128) -> Self {
Self { start: self.start, end }
}
}
impl fmt::Debug for WrappingRange {
@ -1029,7 +1039,7 @@ impl Niche {
return None;
}
Some((start, Scalar { value, valid_range: WrappingRange { start: v.start, end } }))
Some((start, Scalar { value, valid_range: v.with_end(end) }))
}
}