parent
cd24aee8e6
commit
0fcad9cd29
8 changed files with 103 additions and 8 deletions
|
|
@ -0,0 +1,13 @@
|
|||
// force-host
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
use proc_macro::TokenStream;
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn my_macro(_attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||
println!("Called proc_macro_hack with {:?}", input);
|
||||
input
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
// check-pass
|
||||
// aux-build:group-compat-hack.rs
|
||||
// compile-flags: -Z span-debug
|
||||
|
||||
#![no_std] // Don't load unnecessary hygiene information from std
|
||||
extern crate std;
|
||||
|
||||
#[macro_use] extern crate group_compat_hack;
|
||||
|
||||
// Tests the backwards compatibility hack added for certain macros
|
||||
// When an attribute macro named `proc_macro_hack` or `wasm_bindgen`
|
||||
// has an `NtIdent` named `$name`, we pass a plain `Ident` token in
|
||||
// place of a `None`-delimited group. This allows us to maintain
|
||||
// backwards compatibility for older versions of these crates.
|
||||
|
||||
include!("js-sys/src/lib.rs");
|
||||
include!("time-macros-impl/src/lib.rs");
|
||||
|
||||
macro_rules! other {
|
||||
($name:ident) => {
|
||||
#[my_macro] struct Three($name);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
struct Foo;
|
||||
impl_macros!(Foo);
|
||||
arrays!(Foo);
|
||||
other!(Foo);
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
Called proc_macro_hack with TokenStream [Ident { ident: "struct", span: $DIR/time-macros-impl/src/lib.rs:5:21: 5:27 (#5) }, Ident { ident: "One", span: $DIR/time-macros-impl/src/lib.rs:5:28: 5:31 (#5) }, Group { delimiter: Parenthesis, stream: TokenStream [Ident { ident: "Foo", span: $DIR/group-compat-hack.rs:27:18: 27:21 (#0) }], span: $DIR/time-macros-impl/src/lib.rs:5:31: 5:38 (#5) }, Punct { ch: ';', spacing: Alone, span: $DIR/time-macros-impl/src/lib.rs:5:38: 5:39 (#5) }]
|
||||
Called proc_macro_hack with TokenStream [Ident { ident: "struct", span: $DIR/js-sys/src/lib.rs:5:21: 5:27 (#9) }, Ident { ident: "Two", span: $DIR/js-sys/src/lib.rs:5:28: 5:31 (#9) }, Group { delimiter: Parenthesis, stream: TokenStream [Ident { ident: "Foo", span: $DIR/group-compat-hack.rs:28:13: 28:16 (#0) }], span: $DIR/js-sys/src/lib.rs:5:31: 5:38 (#9) }, Punct { ch: ';', spacing: Alone, span: $DIR/js-sys/src/lib.rs:5:38: 5:39 (#9) }]
|
||||
Called proc_macro_hack with TokenStream [Ident { ident: "struct", span: $DIR/group-compat-hack.rs:21:21: 21:27 (#13) }, Ident { ident: "Three", span: $DIR/group-compat-hack.rs:21:28: 21:33 (#13) }, Group { delimiter: Parenthesis, stream: TokenStream [Group { delimiter: None, stream: TokenStream [Ident { ident: "Foo", span: $DIR/group-compat-hack.rs:29:12: 29:15 (#0) }], span: $DIR/group-compat-hack.rs:21:34: 21:39 (#13) }], span: $DIR/group-compat-hack.rs:21:33: 21:40 (#13) }, Punct { ch: ';', spacing: Alone, span: $DIR/group-compat-hack.rs:21:40: 21:41 (#13) }]
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
// ignore-test this is not a test
|
||||
|
||||
macro_rules! arrays {
|
||||
($name:ident) => {
|
||||
#[my_macro] struct Two($name);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
// ignore-test this is not a test
|
||||
|
||||
macro_rules! impl_macros {
|
||||
($name:ident) => {
|
||||
#[my_macro] struct One($name);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue