about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_expand/src/config.rs17
-rw-r--r--compiler/rustc_feature/src/active.rs15
2 files changed, 21 insertions, 11 deletions
diff --git a/compiler/rustc_expand/src/config.rs b/compiler/rustc_expand/src/config.rs
index 40a231c4e80..7ad0e799f44 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 07101778ef1..75cb84d1b56 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<Symbol>
+            ) {
+                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);)+
             }