about summary refs log tree commit diff
path: root/tests/ui/resolve/auxiliary/proc_macro_generate_packed.rs
blob: c0b24706dcba644866530d1d81a07dadc3a4409f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//@ force-host
//@ no-prefer-dynamic
//@ compile-flags: --crate-type proc-macro

extern crate proc_macro;

use proc_macro::*;

#[proc_macro_attribute]
pub fn proc_macro_attribute_that_generates_repr_packed(
    _attr: TokenStream,
    item: TokenStream,
) -> TokenStream {
    let repr = vec![TokenTree::Ident(Ident::new("packed", Span::call_site()))].into_iter();
    let attr = vec![
        TokenTree::Ident(Ident::new("repr", Span::call_site())),
        TokenTree::Group(Group::new(Delimiter::Parenthesis, repr.collect())),
    ]
    .into_iter();
    vec![
        TokenTree::Punct(Punct::new('#', Spacing::Alone)),
        TokenTree::Group(Group::new(Delimiter::Bracket, attr.collect())),
    ]
    .into_iter()
    .chain(item)
    .collect()
}