mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-01 04:27:38 +00:00
28 lines
753 B
Rust
28 lines
753 B
Rust
![]() |
//@ 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()
|
||
|
}
|