@@ -5,6 +5,7 @@ use rustc_data_structures::fx::FxHashMap;
55use rustc_data_structures:: stable_hasher:: { HashStable , StableHasher } ;
66use rustc_errors:: { DiagnosticBuilder , DiagnosticId } ;
77use rustc_hir:: HirId ;
8+ use rustc_index:: vec:: IndexVec ;
89use 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 ) ]
5556pub 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 ) ]
6169pub 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
7482impl 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 ) ]
153161pub struct LintLevelMap {
154162 pub sets : LintLevelSets ,
155- pub id_to_set : FxHashMap < HirId , u32 > ,
163+ pub id_to_set : FxHashMap < HirId , LintStackIndex > ,
156164}
157165
158166impl LintLevelMap {
0 commit comments