From 56fd2531ac44f95295f78b9f55383bfebc26d358 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 5 Oct 2023 16:33:42 +1100 Subject: [PATCH] Add two setter functions to `Features`. --- compiler/rustc_expand/src/config.rs | 17 ++++++----------- compiler/rustc_feature/src/active.rs | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/compiler/rustc_expand/src/config.rs b/compiler/rustc_expand/src/config.rs index 40a231c4e8012..7ad0e799f4464 100644 --- a/compiler/rustc_expand/src/config.rs +++ b/compiler/rustc_expand/src/config.rs @@ -124,8 +124,7 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute]) -> Features { edition, }); } - features.declared_lang_features.push((name, mi.span(), None)); - features.declared_features.insert(name); + features.set_declared_lang_feature(name, mi.span(), None); continue; } @@ -139,8 +138,7 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute]) -> Features { feature: name, edition: features_edition, }); - features.declared_lang_features.push((name, mi.span(), None)); - features.declared_features.insert(name); + features.set_declared_lang_feature(name, mi.span(), None); continue; } @@ -158,8 +156,7 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute]) -> Features { // If the declared feature is stable, record it. if let Some(Feature { since, .. }) = ACCEPTED_FEATURES.iter().find(|f| name == f.name) { let since = Some(Symbol::intern(since)); - features.declared_lang_features.push((name, mi.span(), since)); - features.declared_features.insert(name); + features.set_declared_lang_feature(name, mi.span(), since); continue; } @@ -176,15 +173,13 @@ pub fn features(sess: &Session, krate_attrs: &[Attribute]) -> Features { // If the declared feature is unstable, record it. if let Some(f) = ACTIVE_FEATURES.iter().find(|f| name == f.name) { f.set(&mut features); - features.declared_lang_features.push((name, mi.span(), None)); - features.declared_features.insert(name); + features.set_declared_lang_feature(name, mi.span(), None); continue; } - // Otherwise, the feature is unknown. Record it at a lib feature. + // Otherwise, the feature is unknown. Record it as a lib feature. // It will be checked later. - features.declared_lib_features.push((name, mi.span())); - features.declared_features.insert(name); + features.set_declared_lib_feature(name, mi.span()); } } diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index 07101778ef1d4..75cb84d1b56fb 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -70,6 +70,21 @@ macro_rules! declare_features { } impl Features { + pub fn set_declared_lang_feature( + &mut self, + symbol: Symbol, + span: Span, + since: Option + ) { + self.declared_lang_features.push((symbol, span, since)); + self.declared_features.insert(symbol); + } + + pub fn set_declared_lib_feature(&mut self, symbol: Symbol, span: Span) { + self.declared_lib_features.push((symbol, span)); + self.declared_features.insert(symbol); + } + pub fn walk_feature_fields(&self, mut f: impl FnMut(&str, bool)) { $(f(stringify!($feature), self.$feature);)+ }