Skip to content

Commit 06423e7

Browse files
authored
Rollup merge of rust-lang#146573 - Randl:const-range, r=Mark-Simulacrum
Constify Range functions Constify various `Range` traits, functions, and implementations
2 parents 6a884ad + 4ee19d9 commit 06423e7

File tree

4 files changed

+171
-90
lines changed

4 files changed

+171
-90
lines changed

library/core/src/ops/index_range.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ use crate::ub_checks;
99
///
1010
/// (Normal `Range` code needs to handle degenerate ranges like `10..0`,
1111
/// which takes extra checks compared to only handling the canonical form.)
12-
#[derive(Clone, Debug, PartialEq, Eq)]
12+
#[derive(Debug)]
13+
#[derive_const(Clone, Eq, PartialEq)]
1314
pub(crate) struct IndexRange {
1415
start: usize,
1516
end: usize,
@@ -54,7 +55,7 @@ impl IndexRange {
5455
/// # Safety
5556
/// - Can only be called when `start < end`, aka when `len > 0`.
5657
#[inline]
57-
unsafe fn next_unchecked(&mut self) -> usize {
58+
const unsafe fn next_unchecked(&mut self) -> usize {
5859
debug_assert!(self.start < self.end);
5960

6061
let value = self.start;
@@ -66,7 +67,7 @@ impl IndexRange {
6667
/// # Safety
6768
/// - Can only be called when `start < end`, aka when `len > 0`.
6869
#[inline]
69-
unsafe fn next_back_unchecked(&mut self) -> usize {
70+
const unsafe fn next_back_unchecked(&mut self) -> usize {
7071
debug_assert!(self.start < self.end);
7172

7273
// SAFETY: The range isn't empty, so this cannot overflow
@@ -116,7 +117,7 @@ impl IndexRange {
116117
}
117118

118119
#[inline]
119-
fn assume_range(&self) {
120+
const fn assume_range(&self) {
120121
// SAFETY: This is the type invariant
121122
unsafe { crate::hint::assert_unchecked(self.start <= self.end) }
122123
}

0 commit comments

Comments
 (0)