11//! Functions dealing with attributes and meta items. 
22
3- use  crate :: ast:: { AttrArgs ,  AttrArgsEq ,  AttrId ,  AttrItem ,  AttrKind ,  AttrStyle ,  AttrVec ,  Attribute } ; 
3+ use  crate :: ast:: { 
4+     AttrArgs ,  AttrArgsEq ,  AttrId ,  AttrItem ,  AttrKind ,  AttrStyle ,  AttrVec ,  Attribute ,  Safety , 
5+ } ; 
46use  crate :: ast:: { DelimArgs ,  Expr ,  ExprKind ,  LitKind ,  MetaItemLit } ; 
57use  crate :: ast:: { MetaItem ,  MetaItemKind ,  NestedMetaItem ,  NormalAttr } ; 
68use  crate :: ast:: { Path ,  PathSegment ,  DUMMY_NODE_ID } ; 
@@ -238,7 +240,12 @@ impl AttrItem {
238240    } 
239241
240242    pub  fn  meta ( & self ,  span :  Span )  -> Option < MetaItem >  { 
241-         Some ( MetaItem  {  path :  self . path . clone ( ) ,  kind :  self . meta_kind ( ) ?,  span } ) 
243+         Some ( MetaItem  { 
244+             unsafety :  Safety :: Default , 
245+             path :  self . path . clone ( ) , 
246+             kind :  self . meta_kind ( ) ?, 
247+             span, 
248+         } ) 
242249    } 
243250
244251    pub  fn  meta_kind ( & self )  -> Option < MetaItemKind >  { 
@@ -371,7 +378,10 @@ impl MetaItem {
371378            _ => path. span . hi ( ) , 
372379        } ; 
373380        let  span = path. span . with_hi ( hi) ; 
374-         Some ( MetaItem  {  path,  kind,  span } ) 
381+         // FIXME: This parses `unsafe()` not as unsafe attribute syntax in `MetaItem`, 
382+         // but as a parenthesized list. This (and likely `MetaItem`) should be changed in 
383+         // such a way that builtin macros don't accept extraneous `unsafe()`. 
384+         Some ( MetaItem  {  unsafety :  Safety :: Default ,  path,  kind,  span } ) 
375385    } 
376386} 
377387
@@ -555,11 +565,12 @@ pub fn mk_doc_comment(
555565pub  fn  mk_attr ( 
556566    g :  & AttrIdGenerator , 
557567    style :  AttrStyle , 
568+     unsafety :  Safety , 
558569    path :  Path , 
559570    args :  AttrArgs , 
560571    span :  Span , 
561572)  -> Attribute  { 
562-     mk_attr_from_item ( g,  AttrItem  {  path,  args,  tokens :  None  } ,  None ,  style,  span) 
573+     mk_attr_from_item ( g,  AttrItem  {  unsafety ,   path,  args,  tokens :  None  } ,  None ,  style,  span) 
563574} 
564575
565576pub  fn  mk_attr_from_item ( 
@@ -577,15 +588,22 @@ pub fn mk_attr_from_item(
577588    } 
578589} 
579590
580- pub  fn  mk_attr_word ( g :  & AttrIdGenerator ,  style :  AttrStyle ,  name :  Symbol ,  span :  Span )  -> Attribute  { 
591+ pub  fn  mk_attr_word ( 
592+     g :  & AttrIdGenerator , 
593+     style :  AttrStyle , 
594+     unsafety :  Safety , 
595+     name :  Symbol , 
596+     span :  Span , 
597+ )  -> Attribute  { 
581598    let  path = Path :: from_ident ( Ident :: new ( name,  span) ) ; 
582599    let  args = AttrArgs :: Empty ; 
583-     mk_attr ( g,  style,  path,  args,  span) 
600+     mk_attr ( g,  style,  unsafety ,   path,  args,  span) 
584601} 
585602
586603pub  fn  mk_attr_nested_word ( 
587604    g :  & AttrIdGenerator , 
588605    style :  AttrStyle , 
606+     unsafety :  Safety , 
589607    outer :  Symbol , 
590608    inner :  Symbol , 
591609    span :  Span , 
@@ -601,12 +619,13 @@ pub fn mk_attr_nested_word(
601619        delim :  Delimiter :: Parenthesis , 
602620        tokens :  inner_tokens, 
603621    } ) ; 
604-     mk_attr ( g,  style,  path,  attr_args,  span) 
622+     mk_attr ( g,  style,  unsafety ,   path,  attr_args,  span) 
605623} 
606624
607625pub  fn  mk_attr_name_value_str ( 
608626    g :  & AttrIdGenerator , 
609627    style :  AttrStyle , 
628+     unsafety :  Safety , 
610629    name :  Symbol , 
611630    val :  Symbol , 
612631    span :  Span , 
@@ -621,7 +640,7 @@ pub fn mk_attr_name_value_str(
621640    } ) ; 
622641    let  path = Path :: from_ident ( Ident :: new ( name,  span) ) ; 
623642    let  args = AttrArgs :: Eq ( span,  AttrArgsEq :: Ast ( expr) ) ; 
624-     mk_attr ( g,  style,  path,  args,  span) 
643+     mk_attr ( g,  style,  unsafety ,   path,  args,  span) 
625644} 
626645
627646pub  fn  filter_by_name ( attrs :  & [ Attribute ] ,  name :  Symbol )  -> impl  Iterator < Item  = & Attribute >  { 
0 commit comments