1
- use rustc_ast:: { MetaItemLit , Path , Safety , StrStyle } ;
1
+ use rustc_ast:: ast:: LitIntType ;
2
+ use rustc_ast:: { MetaItemLit , NestedMetaItem , Path , Safety , StrStyle } ;
2
3
use rustc_span:: symbol:: { Ident , kw} ;
3
4
use rustc_span:: { DUMMY_SP , create_default_session_globals_then} ;
4
5
use thin_vec:: thin_vec;
@@ -13,52 +14,52 @@ fn name_value_cfg(name: &str, value: &str) -> Cfg {
13
14
Cfg :: Cfg ( Symbol :: intern ( name) , Some ( Symbol :: intern ( value) ) )
14
15
}
15
16
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 {
18
23
unsafety : Safety :: Default ,
19
24
path : Path :: from_ident ( Ident :: from_str ( name) ) ,
20
25
kind : MetaItemKind :: Word ,
21
26
span : DUMMY_SP ,
22
- }
27
+ } )
23
28
}
24
29
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 {
26
31
let lit = MetaItemLit { symbol, suffix : None , kind, span : DUMMY_SP } ;
27
- MetaItem {
32
+ NestedMetaItem :: MetaItem ( MetaItem {
28
33
unsafety : Safety :: Default ,
29
34
path : Path :: from_ident ( Ident :: from_str ( name) ) ,
30
35
kind : MetaItemKind :: NameValue ( lit) ,
31
36
span : DUMMY_SP ,
32
- }
37
+ } )
33
38
}
34
39
35
40
macro_rules! dummy_meta_item_list {
36
41
( $name: ident, [ $( $list: ident) ,* $( , ) ?] ) => {
37
- MetaItem {
42
+ NestedMetaItem :: MetaItem ( MetaItem {
38
43
unsafety: Safety :: Default ,
39
44
path: Path :: from_ident( Ident :: from_str( stringify!( $name) ) ) ,
40
45
kind: MetaItemKind :: List ( thin_vec![
41
46
$(
42
- NestedMetaItem :: MetaItem (
43
- dummy_meta_item_word( stringify!( $list) ) ,
44
- ) ,
47
+ dummy_meta_item_word( stringify!( $list) ) ,
45
48
) *
46
49
] ) ,
47
50
span: DUMMY_SP ,
48
- }
51
+ } )
49
52
} ;
50
53
51
54
( $name: ident, [ $( $list: expr) ,* $( , ) ?] ) => {
52
- MetaItem {
55
+ NestedMetaItem :: MetaItem ( MetaItem {
53
56
unsafety: Safety :: Default ,
54
57
path: Path :: from_ident( Ident :: from_str( stringify!( $name) ) ) ,
55
58
kind: MetaItemKind :: List ( thin_vec![
56
- $(
57
- NestedMetaItem :: MetaItem ( $list) ,
58
- ) *
59
+ $( $list, ) *
59
60
] ) ,
60
61
span: DUMMY_SP ,
61
- }
62
+ } )
62
63
} ;
63
64
}
64
65
@@ -251,6 +252,14 @@ fn test_cfg_or() {
251
252
#[ test]
252
253
fn test_parse_ok ( ) {
253
254
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
+
254
263
let mi = dummy_meta_item_word ( "all" ) ;
255
264
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "all" ) ) ) ;
256
265
@@ -309,6 +318,14 @@ fn test_parse_err() {
309
318
310
319
let mi = dummy_meta_item_list ! ( not, [ dummy_meta_item_list!( foo, [ ] ) , ] ) ;
311
320
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( ) ) ;
312
329
} )
313
330
}
314
331
0 commit comments