@@ -353,28 +353,28 @@ pub fn find_body_stability(
353353 body_stab
354354}
355355
356+ fn insert_or_error ( sess : & Session , meta : & MetaItem , item : & mut Option < Symbol > ) -> Option < ( ) > {
357+ if item. is_some ( ) {
358+ handle_errors (
359+ & sess. parse_sess ,
360+ meta. span ,
361+ AttrError :: MultipleItem ( pprust:: path_to_string ( & meta. path ) ) ,
362+ ) ;
363+ None
364+ } else if let Some ( v) = meta. value_str ( ) {
365+ * item = Some ( v) ;
366+ Some ( ( ) )
367+ } else {
368+ sess. emit_err ( session_diagnostics:: IncorrectMetaItem { span : meta. span } ) ;
369+ None
370+ }
371+ }
372+
356373/// Read the content of a `stable`/`rustc_const_stable` attribute, and return the feature name and
357374/// its stability information.
358375fn parse_stability ( sess : & Session , attr : & Attribute ) -> Option < ( Symbol , StabilityLevel ) > {
359376 let meta = attr. meta ( ) ?;
360377 let MetaItem { kind : MetaItemKind :: List ( ref metas) , .. } = meta else { return None } ;
361- let insert_or_error = |meta : & MetaItem , item : & mut Option < Symbol > | {
362- if item. is_some ( ) {
363- handle_errors (
364- & sess. parse_sess ,
365- meta. span ,
366- AttrError :: MultipleItem ( pprust:: path_to_string ( & meta. path ) ) ,
367- ) ;
368- return false ;
369- }
370- if let Some ( v) = meta. value_str ( ) {
371- * item = Some ( v) ;
372- true
373- } else {
374- sess. emit_err ( session_diagnostics:: IncorrectMetaItem { span : meta. span } ) ;
375- false
376- }
377- } ;
378378
379379 let mut feature = None ;
380380 let mut since = None ;
@@ -389,16 +389,8 @@ fn parse_stability(sess: &Session, attr: &Attribute) -> Option<(Symbol, Stabilit
389389 } ;
390390
391391 match mi. name_or_empty ( ) {
392- sym:: feature => {
393- if !insert_or_error ( mi, & mut feature) {
394- return None ;
395- }
396- }
397- sym:: since => {
398- if !insert_or_error ( mi, & mut since) {
399- return None ;
400- }
401- }
392+ sym:: feature => insert_or_error ( sess, mi, & mut feature) ?,
393+ sym:: since => insert_or_error ( sess, mi, & mut since) ?,
402394 _ => {
403395 handle_errors (
404396 & sess. parse_sess ,
@@ -438,23 +430,6 @@ fn parse_stability(sess: &Session, attr: &Attribute) -> Option<(Symbol, Stabilit
438430fn parse_unstability ( sess : & Session , attr : & Attribute ) -> Option < ( Symbol , StabilityLevel ) > {
439431 let meta = attr. meta ( ) ?;
440432 let MetaItem { kind : MetaItemKind :: List ( ref metas) , .. } = meta else { return None } ;
441- let insert_or_error = |meta : & MetaItem , item : & mut Option < Symbol > | {
442- if item. is_some ( ) {
443- handle_errors (
444- & sess. parse_sess ,
445- meta. span ,
446- AttrError :: MultipleItem ( pprust:: path_to_string ( & meta. path ) ) ,
447- ) ;
448- return false ;
449- }
450- if let Some ( v) = meta. value_str ( ) {
451- * item = Some ( v) ;
452- true
453- } else {
454- sess. emit_err ( session_diagnostics:: IncorrectMetaItem { span : meta. span } ) ;
455- false
456- }
457- } ;
458433
459434 let mut feature = None ;
460435 let mut reason = None ;
@@ -473,20 +448,10 @@ fn parse_unstability(sess: &Session, attr: &Attribute) -> Option<(Symbol, Stabil
473448 } ;
474449
475450 match mi. name_or_empty ( ) {
476- sym:: feature => {
477- if !insert_or_error ( mi, & mut feature) {
478- return None ;
479- }
480- }
481- sym:: reason => {
482- if !insert_or_error ( mi, & mut reason) {
483- return None ;
484- }
485- }
451+ sym:: feature => insert_or_error ( sess, mi, & mut feature) ?,
452+ sym:: reason => insert_or_error ( sess, mi, & mut reason) ?,
486453 sym:: issue => {
487- if !insert_or_error ( mi, & mut issue) {
488- return None ;
489- }
454+ insert_or_error ( sess, mi, & mut issue) ?;
490455
491456 // These unwraps are safe because `insert_or_error` ensures the meta item
492457 // is a name/value pair string literal.
@@ -515,11 +480,7 @@ fn parse_unstability(sess: &Session, attr: &Attribute) -> Option<(Symbol, Stabil
515480 }
516481 is_soft = true ;
517482 }
518- sym:: implied_by => {
519- if !insert_or_error ( mi, & mut implied_by) {
520- return None ;
521- }
522- }
483+ sym:: implied_by => insert_or_error ( sess, mi, & mut implied_by) ?,
523484 _ => {
524485 handle_errors (
525486 & sess. parse_sess ,
0 commit comments