1- use rustc_ast:: { MetaItemLit , Path , Safety , StrStyle } ;
1+ use rustc_ast:: ast:: LitIntType ;
2+ use rustc_ast:: { MetaItemLit , NestedMetaItem , Path , Safety , StrStyle } ;
23use rustc_span:: symbol:: { Ident , kw} ;
34use rustc_span:: { DUMMY_SP , create_default_session_globals_then} ;
45use thin_vec:: thin_vec;
@@ -13,52 +14,52 @@ fn name_value_cfg(name: &str, value: &str) -> Cfg {
1314 Cfg :: Cfg ( Symbol :: intern ( name) , Some ( Symbol :: intern ( value) ) )
1415}
1516
16- fn dummy_meta_item_word ( name : & str ) -> MetaItem {
17- MetaItem {
17+ fn dummy_lit ( symbol : Symbol , kind : LitKind ) -> NestedMetaItem {
18+ NestedMetaItem :: Lit ( MetaItemLit { symbol, suffix : None , kind, span : DUMMY_SP } )
19+ }
20+
21+ fn dummy_meta_item_word ( name : & str ) -> NestedMetaItem {
22+ NestedMetaItem :: MetaItem ( MetaItem {
1823 unsafety : Safety :: Default ,
1924 path : Path :: from_ident ( Ident :: from_str ( name) ) ,
2025 kind : MetaItemKind :: Word ,
2126 span : DUMMY_SP ,
22- }
27+ } )
2328}
2429
25- fn dummy_meta_item_name_value ( name : & str , symbol : Symbol , kind : LitKind ) -> MetaItem {
30+ fn dummy_meta_item_name_value ( name : & str , symbol : Symbol , kind : LitKind ) -> NestedMetaItem {
2631 let lit = MetaItemLit { symbol, suffix : None , kind, span : DUMMY_SP } ;
27- MetaItem {
32+ NestedMetaItem :: MetaItem ( MetaItem {
2833 unsafety : Safety :: Default ,
2934 path : Path :: from_ident ( Ident :: from_str ( name) ) ,
3035 kind : MetaItemKind :: NameValue ( lit) ,
3136 span : DUMMY_SP ,
32- }
37+ } )
3338}
3439
3540macro_rules! dummy_meta_item_list {
3641 ( $name: ident, [ $( $list: ident) ,* $( , ) ?] ) => {
37- MetaItem {
42+ NestedMetaItem :: MetaItem ( MetaItem {
3843 unsafety: Safety :: Default ,
3944 path: Path :: from_ident( Ident :: from_str( stringify!( $name) ) ) ,
4045 kind: MetaItemKind :: List ( thin_vec![
4146 $(
42- NestedMetaItem :: MetaItem (
43- dummy_meta_item_word( stringify!( $list) ) ,
44- ) ,
47+ dummy_meta_item_word( stringify!( $list) ) ,
4548 ) *
4649 ] ) ,
4750 span: DUMMY_SP ,
48- }
51+ } )
4952 } ;
5053
5154 ( $name: ident, [ $( $list: expr) ,* $( , ) ?] ) => {
52- MetaItem {
55+ NestedMetaItem :: MetaItem ( MetaItem {
5356 unsafety: Safety :: Default ,
5457 path: Path :: from_ident( Ident :: from_str( stringify!( $name) ) ) ,
5558 kind: MetaItemKind :: List ( thin_vec![
56- $(
57- NestedMetaItem :: MetaItem ( $list) ,
58- ) *
59+ $( $list, ) *
5960 ] ) ,
6061 span: DUMMY_SP ,
61- }
62+ } )
6263 } ;
6364}
6465
@@ -251,6 +252,14 @@ fn test_cfg_or() {
251252#[ test]
252253fn test_parse_ok ( ) {
253254 create_default_session_globals_then ( || {
255+ let r#true = Symbol :: intern ( "true" ) ;
256+ let mi = dummy_lit ( r#true, LitKind :: Bool ( true ) ) ;
257+ assert_eq ! ( Cfg :: parse( & mi) , Ok ( Cfg :: True ) ) ;
258+
259+ let r#false = Symbol :: intern ( "false" ) ;
260+ let mi = dummy_lit ( r#false, LitKind :: Bool ( false ) ) ;
261+ assert_eq ! ( Cfg :: parse( & mi) , Ok ( Cfg :: False ) ) ;
262+
254263 let mi = dummy_meta_item_word ( "all" ) ;
255264 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "all" ) ) ) ;
256265
@@ -309,6 +318,14 @@ fn test_parse_err() {
309318
310319 let mi = dummy_meta_item_list ! ( not, [ dummy_meta_item_list!( foo, [ ] ) , ] ) ;
311320 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
321+
322+ let c = Symbol :: intern ( "e" ) ;
323+ let mi = dummy_lit ( c, LitKind :: Char ( 'e' ) ) ;
324+ assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
325+
326+ let five = Symbol :: intern ( "5" ) ;
327+ let mi = dummy_lit ( five, LitKind :: Int ( 5 . into ( ) , LitIntType :: Unsuffixed ) ) ;
328+ assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
312329 } )
313330}
314331
0 commit comments