1- use super :: active:: { ACTIVE_FEATURES , Features } ;
1+ use super :: { active:: { ACTIVE_FEATURES , Features } , Feature , State as FeatureState } ;
22use super :: accepted:: ACCEPTED_FEATURES ;
33use super :: removed:: { REMOVED_FEATURES , STABLE_REMOVED_FEATURES } ;
44use super :: builtin_attrs:: { AttributeGate , AttributeType , BuiltinAttribute , BUILTIN_ATTRIBUTE_MAP } ;
@@ -127,17 +127,16 @@ pub fn check_attribute(attr: &ast::Attribute, parse_sess: &ParseSess, features:
127127}
128128
129129fn 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) {
132131 // 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
135134 } else {
136135 // search in Accepted, Removed, or Stable Removed features
137136 let found = ACCEPTED_FEATURES . iter ( ) . chain ( REMOVED_FEATURES ) . chain ( STABLE_REMOVED_FEATURES )
138- . find ( |t| t. 0 == feature) ;
137+ . find ( |t| t. name == feature) ;
139138 match found {
140- Some ( & ( _ , _ , issue, _ ) ) => issue,
139+ Some ( & Feature { issue, .. } ) => issue,
141140 None => panic ! ( "Feature `{}` is not declared anywhere" , feature) ,
142141 }
143142 }
@@ -829,14 +828,18 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute],
829828 continue ;
830829 }
831830
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+ }
837840 }
838841
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 ) {
840843 let since = Some ( Symbol :: intern ( since) ) ;
841844 features. declared_lang_features . push ( ( name, mi. span ( ) , since) ) ;
842845 continue ;
@@ -851,8 +854,8 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute],
851854 }
852855 }
853856
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 ( ) ) ;
856859 features. declared_lang_features . push ( ( name, mi. span ( ) , None ) ) ;
857860 continue ;
858861 }
0 commit comments