2 // ^ compiletest by default builds all aux files as dylibs, but we don't want that for proc-macro
3 // crates. If we don't set this, compiletest will override the `crate_type` attribute below and
4 // compile this as dylib. Removing this then causes the test to fail because a `dylib` crate can't
5 // contain a proc-macro.
8 #![crate_type = "proc-macro"]
10 extern crate proc_macro;
12 use proc_macro::{Delimiter, Group, Ident, Span, TokenStream, TokenTree};
13 use std::iter::FromIterator;
16 pub fn macro_test(input_stream: TokenStream) -> TokenStream {
17 let first_token = input_stream.into_iter().next().unwrap();
18 let span = first_token.span();
20 TokenStream::from_iter(vec![
21 TokenTree::Ident(Ident::new("fn", Span::call_site())),
22 TokenTree::Ident(Ident::new("code", Span::call_site())),
23 TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
24 TokenTree::Group(Group::new(Delimiter::Brace, {
25 let mut clause = Group::new(Delimiter::Brace, TokenStream::new());
26 clause.set_span(span);
28 TokenStream::from_iter(vec![
29 TokenTree::Ident(Ident::new("if", Span::call_site())),
30 TokenTree::Ident(Ident::new("true", Span::call_site())),
31 TokenTree::Group(clause.clone()),
32 TokenTree::Ident(Ident::new("else", Span::call_site())),
33 TokenTree::Group(clause.clone()),