]> git.lizzy.rs Git - rust.git/blob - src/test/ui/proc-macro/auxiliary/attribute-spans-preserved.rs
normalize stderr
[rust.git] / src / test / ui / proc-macro / auxiliary / attribute-spans-preserved.rs
1 // force-host
2 // no-prefer-dynamic
3
4 #![crate_type = "proc-macro"]
5
6 extern crate proc_macro;
7
8 use proc_macro::*;
9
10 #[proc_macro_attribute]
11 pub fn foo(attr: TokenStream, f: TokenStream) -> TokenStream {
12     let mut tokens = f.into_iter();
13     assert_eq!(tokens.next().unwrap().to_string(), "#");
14     let next_attr = match tokens.next().unwrap() {
15         TokenTree::Group(g) => g,
16         _ => panic!(),
17     };
18
19     let fn_tok = tokens.next().unwrap();
20     let ident_tok = tokens.next().unwrap();
21     let args_tok = tokens.next().unwrap();
22     let body = tokens.next().unwrap();
23
24     let new_body = attr.into_iter()
25         .chain(next_attr.stream().into_iter().skip(1));
26
27     let tokens = vec![
28         fn_tok,
29         ident_tok,
30         args_tok,
31         Group::new(Delimiter::Brace, new_body.collect()).into(),
32     ].into_iter().collect::<TokenStream>();
33     println!("{}", tokens);
34     return tokens
35 }