Skip to content

Commit 66fee06

Browse files
committed
Use a newtype_index instead of a u32.
1 parent f51c57f commit 66fee06

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

Diff for: compiler/rustc_lint/src/levels.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ use rustc_middle::hir::map::Map;
1111
use rustc_middle::lint::LevelAndSource;
1212
use rustc_middle::lint::LintDiagnosticBuilder;
1313
use rustc_middle::lint::{
14-
struct_lint_level, LintLevelMap, LintLevelSets, LintLevelSource, LintSet,
14+
struct_lint_level, LintLevelMap, LintLevelSets, LintLevelSource, LintSet, LintStackIndex,
15+
COMMAND_LINE,
1516
};
1617
use rustc_middle::ty::query::Providers;
1718
use rustc_middle::ty::TyCtxt;
@@ -50,15 +51,15 @@ fn lint_levels(tcx: TyCtxt<'_>, (): ()) -> LintLevelMap {
5051
pub struct LintLevelsBuilder<'s> {
5152
sess: &'s Session,
5253
sets: LintLevelSets,
53-
id_to_set: FxHashMap<HirId, u32>,
54-
cur: u32,
54+
id_to_set: FxHashMap<HirId, LintStackIndex>,
55+
cur: LintStackIndex,
5556
warn_about_weird_lints: bool,
5657
store: &'s LintStore,
5758
crate_attrs: &'s [ast::Attribute],
5859
}
5960

6061
pub struct BuilderPush {
61-
prev: u32,
62+
prev: LintStackIndex,
6263
pub changed: bool,
6364
}
6465

@@ -72,7 +73,7 @@ impl<'s> LintLevelsBuilder<'s> {
7273
let mut builder = LintLevelsBuilder {
7374
sess,
7475
sets: LintLevelSets::new(),
75-
cur: 0,
76+
cur: COMMAND_LINE,
7677
id_to_set: Default::default(),
7778
warn_about_weird_lints,
7879
store,
@@ -120,7 +121,7 @@ impl<'s> LintLevelsBuilder<'s> {
120121
}
121122
}
122123

123-
self.sets.list.push(LintSet::CommandLine { specs });
124+
self.cur = self.sets.list.push(LintSet::CommandLine { specs });
124125
}
125126

126127
/// Attempts to insert the `id` to `level_src` map entry. If unsuccessful
@@ -523,8 +524,7 @@ impl<'s> LintLevelsBuilder<'s> {
523524

524525
let prev = self.cur;
525526
if !specs.is_empty() {
526-
self.cur = self.sets.list.len() as u32;
527-
self.sets.list.push(LintSet::Node { specs, parent: prev });
527+
self.cur = self.sets.list.push(LintSet::Node { specs, parent: prev });
528528
}
529529

530530
BuilderPush { prev, changed: prev != self.cur }

Diff for: compiler/rustc_middle/src/lint.rs

+15-7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use rustc_data_structures::fx::FxHashMap;
55
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
66
use rustc_errors::{DiagnosticBuilder, DiagnosticId};
77
use rustc_hir::HirId;
8+
use rustc_index::vec::IndexVec;
89
use rustc_session::lint::{
910
builtin::{self, FORBIDDEN_LINT_GROUPS},
1011
FutureIncompatibilityReason, Level, Lint, LintId,
@@ -53,10 +54,17 @@ pub type LevelAndSource = (Level, LintLevelSource);
5354

5455
#[derive(Debug, HashStable)]
5556
pub struct LintLevelSets {
56-
pub list: Vec<LintSet>,
57+
pub list: IndexVec<LintStackIndex, LintSet>,
5758
pub lint_cap: Level,
5859
}
5960

61+
rustc_index::newtype_index! {
62+
#[derive(HashStable)]
63+
pub struct LintStackIndex {
64+
const COMMAND_LINE = 0,
65+
}
66+
}
67+
6068
#[derive(Debug, HashStable)]
6169
pub enum LintSet {
6270
CommandLine {
@@ -67,19 +75,19 @@ pub enum LintSet {
6775

6876
Node {
6977
specs: FxHashMap<LintId, LevelAndSource>,
70-
parent: u32,
78+
parent: LintStackIndex,
7179
},
7280
}
7381

7482
impl LintLevelSets {
7583
pub fn new() -> Self {
76-
LintLevelSets { list: Vec::new(), lint_cap: Level::Forbid }
84+
LintLevelSets { list: IndexVec::new(), lint_cap: Level::Forbid }
7785
}
7886

7987
pub fn get_lint_level(
8088
&self,
8189
lint: &'static Lint,
82-
idx: u32,
90+
idx: LintStackIndex,
8391
aux: Option<&FxHashMap<LintId, LevelAndSource>>,
8492
sess: &Session,
8593
) -> LevelAndSource {
@@ -122,7 +130,7 @@ impl LintLevelSets {
122130
pub fn get_lint_id_level(
123131
&self,
124132
id: LintId,
125-
mut idx: u32,
133+
mut idx: LintStackIndex,
126134
aux: Option<&FxHashMap<LintId, LevelAndSource>>,
127135
) -> (Option<Level>, LintLevelSource) {
128136
if let Some(specs) = aux {
@@ -131,7 +139,7 @@ impl LintLevelSets {
131139
}
132140
}
133141
loop {
134-
match self.list[idx as usize] {
142+
match self.list[idx] {
135143
LintSet::CommandLine { ref specs } => {
136144
if let Some(&(level, src)) = specs.get(&id) {
137145
return (Some(level), src);
@@ -152,7 +160,7 @@ impl LintLevelSets {
152160
#[derive(Debug)]
153161
pub struct LintLevelMap {
154162
pub sets: LintLevelSets,
155-
pub id_to_set: FxHashMap<HirId, u32>,
163+
pub id_to_set: FxHashMap<HirId, LintStackIndex>,
156164
}
157165

158166
impl LintLevelMap {

0 commit comments

Comments
 (0)