@@ -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