1
- use super :: active:: { ACTIVE_FEATURES , Features } ;
1
+ use super :: { active:: { ACTIVE_FEATURES , Features } , Feature , State as FeatureState } ;
2
2
use super :: accepted:: ACCEPTED_FEATURES ;
3
3
use super :: removed:: { REMOVED_FEATURES , STABLE_REMOVED_FEATURES } ;
4
4
use super :: builtin_attrs:: { AttributeGate , AttributeType , BuiltinAttribute , BUILTIN_ATTRIBUTE_MAP } ;
@@ -127,17 +127,16 @@ pub fn check_attribute(attr: &ast::Attribute, parse_sess: &ParseSess, features:
127
127
}
128
128
129
129
fn find_lang_feature_issue ( feature : Symbol ) -> Option < u32 > {
130
- if let Some ( info) = ACTIVE_FEATURES . iter ( ) . find ( |t| t. 0 == feature) {
131
- let issue = info. 2 ;
130
+ if let Some ( info) = ACTIVE_FEATURES . iter ( ) . find ( |t| t. name == feature) {
132
131
// FIXME (#28244): enforce that active features have issue numbers
133
- // assert!(issue.is_some())
134
- issue
132
+ // assert!(info. issue.is_some())
133
+ info . issue
135
134
} else {
136
135
// search in Accepted, Removed, or Stable Removed features
137
136
let found = ACCEPTED_FEATURES . iter ( ) . chain ( REMOVED_FEATURES ) . chain ( STABLE_REMOVED_FEATURES )
138
- . find ( |t| t. 0 == feature) ;
137
+ . find ( |t| t. name == feature) ;
139
138
match found {
140
- Some ( & ( _ , _ , issue, _ ) ) => issue,
139
+ Some ( & Feature { issue, .. } ) => issue,
141
140
None => panic ! ( "Feature `{}` is not declared anywhere" , feature) ,
142
141
}
143
142
}
@@ -829,14 +828,18 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute],
829
828
continue ;
830
829
}
831
830
832
- let removed = REMOVED_FEATURES . iter ( ) . find ( |f| name == f. 0 ) ;
833
- let stable_removed = STABLE_REMOVED_FEATURES . iter ( ) . find ( |f| name == f. 0 ) ;
834
- if let Some ( ( .., reason) ) = removed. or ( stable_removed) {
835
- feature_removed ( span_handler, mi. span ( ) , * reason) ;
836
- continue ;
831
+ let removed = REMOVED_FEATURES . iter ( ) . find ( |f| name == f. name ) ;
832
+ let stable_removed = STABLE_REMOVED_FEATURES . iter ( ) . find ( |f| name == f. name ) ;
833
+ if let Some ( Feature { state, .. } ) = removed. or ( stable_removed) {
834
+ if let FeatureState :: Removed { reason }
835
+ | FeatureState :: Stabilized { reason } = state
836
+ {
837
+ feature_removed ( span_handler, mi. span ( ) , * reason) ;
838
+ continue ;
839
+ }
837
840
}
838
841
839
- if let Some ( ( _ , since, ..) ) = ACCEPTED_FEATURES . iter ( ) . find ( |f| name == f. 0 ) {
842
+ if let Some ( Feature { since, .. } ) = ACCEPTED_FEATURES . iter ( ) . find ( |f| name == f. name ) {
840
843
let since = Some ( Symbol :: intern ( since) ) ;
841
844
features. declared_lang_features . push ( ( name, mi. span ( ) , since) ) ;
842
845
continue ;
@@ -851,8 +854,8 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute],
851
854
}
852
855
}
853
856
854
- if let Some ( ( .. , set ) ) = ACTIVE_FEATURES . iter ( ) . find ( |f| name == f. 0 ) {
855
- set ( & mut features, mi. span ( ) ) ;
857
+ if let Some ( f ) = ACTIVE_FEATURES . iter ( ) . find ( |f| name == f. name ) {
858
+ f . set ( & mut features, mi. span ( ) ) ;
856
859
features. declared_lang_features . push ( ( name, mi. span ( ) , None ) ) ;
857
860
continue ;
858
861
}
0 commit comments