//@ force-host //@ no-prefer-dynamic #![crate_type = "proc-macro"] extern crate proc_macro; use proc_macro::*; // This proc macro ignores its input and returns this token stream // // impl <«A1»: Comparable> Comparable for («A1»,) {} // // where `«`/`»` are invisible delimiters. This was being misparsed in bug // #128895. #[proc_macro] pub fn main(_input: TokenStream) -> TokenStream { let a1 = TokenTree::Group( Group::new( Delimiter::None, std::iter::once(TokenTree::Ident(Ident::new("A1", Span::call_site()))).collect(), ) ); vec![ TokenTree::Ident(Ident::new("impl", Span::call_site())), TokenTree::Punct(Punct::new('<', Spacing::Alone)), a1.clone(), TokenTree::Punct(Punct::new(':', Spacing::Alone)), TokenTree::Ident(Ident::new("Comparable", Span::call_site())), TokenTree::Punct(Punct::new('>', Spacing::Alone)), TokenTree::Ident(Ident::new("Comparable", Span::call_site())), TokenTree::Ident(Ident::new("for", Span::call_site())), TokenTree::Group( Group::new( Delimiter::Parenthesis, vec![ a1.clone(), TokenTree::Punct(Punct::new(',', Spacing::Alone)), ].into_iter().collect::(), ) ), TokenTree::Group(Group::new(Delimiter::Brace, TokenStream::new())), ].into_iter().collect::() }