@@ -104,6 +104,7 @@ impl<'a> ArgParser<'a> {
104104        parts :  & [ Symbol ] , 
105105        psess :  & ' sess  ParseSess , 
106106        should_emit :  ShouldEmit , 
107+         parsing_cfg :  bool , 
107108    )  -> Option < Self >  { 
108109        Some ( match  value { 
109110            AttrArgs :: Empty  => Self :: NoArgs , 
@@ -124,7 +125,7 @@ impl<'a> ArgParser<'a> {
124125                    return  None ; 
125126                } 
126127
127-                 Self :: List ( MetaItemListParser :: new ( args,  psess,  should_emit) ?) 
128+                 Self :: List ( MetaItemListParser :: new ( args,  psess,  should_emit,  parsing_cfg ) ?) 
128129            } 
129130            AttrArgs :: Eq  {  eq_span,  expr }  => Self :: NameValue ( NameValueParser  { 
130131                eq_span :  * eq_span, 
@@ -248,10 +249,17 @@ impl<'a> MetaItemParser<'a> {
248249        parts :  & [ Symbol ] , 
249250        psess :  & ' sess  ParseSess , 
250251        should_emit :  ShouldEmit , 
252+         parsing_cfg :  bool , 
251253    )  -> Option < Self >  { 
252254        Some ( Self  { 
253255            path :  PathParser ( Cow :: Borrowed ( & attr. item . path ) ) , 
254-             args :  ArgParser :: from_attr_args ( & attr. item . args ,  parts,  psess,  should_emit) ?, 
256+             args :  ArgParser :: from_attr_args ( 
257+                 & attr. item . args , 
258+                 parts, 
259+                 psess, 
260+                 should_emit, 
261+                 parsing_cfg, 
262+             ) ?, 
255263        } ) 
256264    } 
257265} 
@@ -425,7 +433,12 @@ impl<'a, 'sess> MetaItemListParserContext<'a, 'sess> {
425433            } ; 
426434        } 
427435
428-         let  path = self . parser . parse_path ( PathStyle :: Mod ) ?; 
436+         let  path = if  self . parser . parse_cfg_pred  { 
437+             self . parser . parse_cfg_pred  = false ; 
438+             Path :: from_ident ( self . parser . parse_ident ( ) ?) 
439+         }  else  { 
440+             self . parser . parse_path ( PathStyle :: Mod ) ?
441+         } ; 
429442
430443        // Check style of arguments that this meta item has 
431444        let  args = if  self . parser . check ( exp ! ( OpenParen ) )  { 
@@ -513,8 +526,11 @@ impl<'a, 'sess> MetaItemListParserContext<'a, 'sess> {
513526        psess :  & ' sess  ParseSess , 
514527        span :  Span , 
515528        should_emit :  ShouldEmit , 
529+         parsing_cfg :  bool , 
516530    )  -> PResult < ' sess ,  MetaItemListParser < ' static > >  { 
517531        let  mut  parser = Parser :: new ( psess,  tokens,  None ) ; 
532+         parser. parse_cfg_pred  = parsing_cfg; 
533+ 
518534        let  mut  this = MetaItemListParserContext  {  parser :  & mut  parser,  should_emit } ; 
519535
520536        // Presumably, the majority of the time there will only be one attr. 
@@ -546,12 +562,14 @@ impl<'a> MetaItemListParser<'a> {
546562        delim :  & ' a  DelimArgs , 
547563        psess :  & ' sess  ParseSess , 
548564        should_emit :  ShouldEmit , 
565+         parsing_cfg :  bool , 
549566    )  -> Option < Self >  { 
550567        match  MetaItemListParserContext :: parse ( 
551568            delim. tokens . clone ( ) , 
552569            psess, 
553570            delim. dspan . entire ( ) , 
554571            should_emit, 
572+             parsing_cfg, 
555573        )  { 
556574            Ok ( s)  => Some ( s) , 
557575            Err ( e)  => { 
0 commit comments