From 5a731ffdaefe26f68d0744882390f6c12c4284da Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Tue, 1 Dec 2020 21:56:15 +0100 Subject: [PATCH] Encode CommandLine in the index only. --- compiler/rustc_lint/src/levels.rs | 4 ++-- compiler/rustc_middle/src/lint.rs | 37 +++++++++++-------------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/compiler/rustc_lint/src/levels.rs b/compiler/rustc_lint/src/levels.rs index d190be24b60a5..c7e26013f1cbe 100644 --- a/compiler/rustc_lint/src/levels.rs +++ b/compiler/rustc_lint/src/levels.rs @@ -121,7 +121,7 @@ impl<'s> LintLevelsBuilder<'s> { } } - self.cur = self.sets.list.push(LintSet::CommandLine { specs }); + self.cur = self.sets.list.push(LintSet { specs, parent: COMMAND_LINE }); } /// Attempts to insert the `id` to `level_src` map entry. If unsuccessful @@ -524,7 +524,7 @@ impl<'s> LintLevelsBuilder<'s> { let prev = self.cur; if !specs.is_empty() { - self.cur = self.sets.list.push(LintSet::Node { specs, parent: prev }); + self.cur = self.sets.list.push(LintSet { specs, parent: prev }); } BuilderPush { prev, changed: prev != self.cur } diff --git a/compiler/rustc_middle/src/lint.rs b/compiler/rustc_middle/src/lint.rs index bd1817684dc84..560581cf641a5 100644 --- a/compiler/rustc_middle/src/lint.rs +++ b/compiler/rustc_middle/src/lint.rs @@ -66,17 +66,12 @@ rustc_index::newtype_index! { } #[derive(Debug, HashStable)] -pub enum LintSet { - CommandLine { - // -A,-W,-D flags, a `Symbol` for the flag itself and `Level` for which - // flag. - specs: FxHashMap, - }, - - Node { - specs: FxHashMap, - parent: LintStackIndex, - }, +pub struct LintSet { + // -A,-W,-D flags, a `Symbol` for the flag itself and `Level` for which + // flag. + pub specs: FxHashMap, + + pub parent: LintStackIndex, } impl LintLevelSets { @@ -139,20 +134,14 @@ impl LintLevelSets { } } loop { - match self.list[idx] { - LintSet::CommandLine { ref specs } => { - if let Some(&(level, src)) = specs.get(&id) { - return (Some(level), src); - } - return (None, LintLevelSource::Default); - } - LintSet::Node { ref specs, parent } => { - if let Some(&(level, src)) = specs.get(&id) { - return (Some(level), src); - } - idx = parent; - } + let LintSet { ref specs, parent } = self.list[idx]; + if let Some(&(level, src)) = specs.get(&id) { + return (Some(level), src); + } + if idx == COMMAND_LINE { + return (None, LintLevelSource::Default); } + idx = parent; } } }