Implement built-in attribute macro #[cfg_eval]
This commit is contained in:
parent
069e612e73
commit
5dad6c2575
11 changed files with 259 additions and 0 deletions
9
src/test/ui/proc-macro/cfg-eval-fail.rs
Normal file
9
src/test/ui/proc-macro/cfg-eval-fail.rs
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#![feature(cfg_eval)]
|
||||
#![feature(stmt_expr_attributes)]
|
||||
|
||||
fn main() {
|
||||
let _ = #[cfg_eval] #[cfg(FALSE)] 0;
|
||||
//~^ ERROR removing an expression is not supported in this position
|
||||
//~| ERROR removing an expression is not supported in this position
|
||||
//~| ERROR removing an expression is not supported in this position
|
||||
}
|
||||
20
src/test/ui/proc-macro/cfg-eval-fail.stderr
Normal file
20
src/test/ui/proc-macro/cfg-eval-fail.stderr
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
error: removing an expression is not supported in this position
|
||||
--> $DIR/cfg-eval-fail.rs:5:25
|
||||
|
|
||||
LL | let _ = #[cfg_eval] #[cfg(FALSE)] 0;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: removing an expression is not supported in this position
|
||||
--> $DIR/cfg-eval-fail.rs:5:25
|
||||
|
|
||||
LL | let _ = #[cfg_eval] #[cfg(FALSE)] 0;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: removing an expression is not supported in this position
|
||||
--> $DIR/cfg-eval-fail.rs:5:25
|
||||
|
|
||||
LL | let _ = #[cfg_eval] #[cfg(FALSE)] 0;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
32
src/test/ui/proc-macro/cfg-eval.rs
Normal file
32
src/test/ui/proc-macro/cfg-eval.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// check-pass
|
||||
// compile-flags: -Z span-debug
|
||||
// aux-build:test-macros.rs
|
||||
|
||||
#![feature(cfg_eval)]
|
||||
#![feature(proc_macro_hygiene)]
|
||||
#![feature(stmt_expr_attributes)]
|
||||
|
||||
#![no_std] // Don't load unnecessary hygiene information from std
|
||||
extern crate std;
|
||||
|
||||
#[macro_use]
|
||||
extern crate test_macros;
|
||||
|
||||
#[cfg_eval]
|
||||
#[print_attr]
|
||||
struct S1 {
|
||||
#[cfg(FALSE)]
|
||||
field_false: u8,
|
||||
#[cfg(all(/*true*/))]
|
||||
#[cfg_attr(FALSE, unknown_attr)]
|
||||
#[cfg_attr(all(/*true*/), allow())]
|
||||
field_true: u8,
|
||||
}
|
||||
|
||||
#[cfg_eval]
|
||||
#[cfg(FALSE)]
|
||||
struct S2 {}
|
||||
|
||||
fn main() {
|
||||
let _ = #[cfg_eval] #[print_attr](#[cfg(FALSE)] 0, #[cfg(all(/*true*/))] 1);
|
||||
}
|
||||
135
src/test/ui/proc-macro/cfg-eval.stdout
Normal file
135
src/test/ui/proc-macro/cfg-eval.stdout
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
PRINT-ATTR INPUT (DISPLAY): struct S1 { #[cfg(all())] #[allow()] field_true : u8, }
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Ident {
|
||||
ident: "struct",
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "S1",
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Brace,
|
||||
stream: TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "cfg",
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "all",
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "allow",
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "field_true",
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ':',
|
||||
spacing: Alone,
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Ident {
|
||||
ident: "u8",
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ',',
|
||||
spacing: Alone,
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/cfg-eval.rs:17:1: 24:2 (#0),
|
||||
},
|
||||
]
|
||||
PRINT-ATTR INPUT (DISPLAY): (#[cfg(all())] 1,)
|
||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Punct {
|
||||
ch: '#',
|
||||
spacing: Alone,
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Bracket,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "cfg",
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [
|
||||
Ident {
|
||||
ident: "all",
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
Group {
|
||||
delimiter: Parenthesis,
|
||||
stream: TokenStream [],
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
Literal {
|
||||
kind: Integer,
|
||||
symbol: "1",
|
||||
suffix: None,
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
Punct {
|
||||
ch: ',',
|
||||
spacing: Alone,
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
],
|
||||
span: $DIR/cfg-eval.rs:31:38: 31:80 (#0),
|
||||
},
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue