diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2021-01-31 01:47:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-31 01:47:34 +0100 |
| commit | 3e8ae5dcba4e5ad2f9a543df8da1ea679d84e4ce (patch) | |
| tree | 9c32337ac1b6d8863f07e854099db63db6249336 /src | |
| parent | 84b6f46d6e4bbbb0ab951ac1aede0d48cf183c26 (diff) | |
| parent | 5d739180cde7f7350b7a90e8a7542bd9c4cd6783 (diff) | |
| download | rust-3e8ae5dcba4e5ad2f9a543df8da1ea679d84e4ce.tar.gz rust-3e8ae5dcba4e5ad2f9a543df8da1ea679d84e4ce.zip | |
Rollup merge of #81472 - Aaron1011:fix/revert-cursor-clone, r=petrochenkov
Clone entire `TokenCursor` when collecting tokens Reverts PR #80830 Fixes taiki-e/pin-project#312 We can have an arbitrary number of `None`-delimited group frames pushed on the stack due to proc-macro invocations, which can legally be exited. Attempting to account for this would add a lot of complexity for a tiny performance gain, so let's just use the original strategy.
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/proc-macro/auxiliary/nonterminal-recollect-attr.rs | 23 | ||||
| -rw-r--r-- | src/test/ui/proc-macro/nonterminal-recollect-attr.rs | 17 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/test/ui/proc-macro/auxiliary/nonterminal-recollect-attr.rs b/src/test/ui/proc-macro/auxiliary/nonterminal-recollect-attr.rs new file mode 100644 index 00000000000..a6903283aa1 --- /dev/null +++ b/src/test/ui/proc-macro/auxiliary/nonterminal-recollect-attr.rs @@ -0,0 +1,23 @@ +// force-host +// no-prefer-dynamic + +#![crate_type = "proc-macro"] +#![feature(proc_macro_quote)] + +extern crate proc_macro; +use proc_macro::{TokenStream, quote}; + +#[proc_macro_attribute] +pub fn first_attr(_: TokenStream, input: TokenStream) -> TokenStream { + let recollected: TokenStream = input.into_iter().collect(); + quote! { + #[second_attr] + $recollected + } +} + +#[proc_macro_attribute] +pub fn second_attr(_: TokenStream, input: TokenStream) -> TokenStream { + let _recollected: TokenStream = input.into_iter().collect(); + TokenStream::new() +} diff --git a/src/test/ui/proc-macro/nonterminal-recollect-attr.rs b/src/test/ui/proc-macro/nonterminal-recollect-attr.rs new file mode 100644 index 00000000000..5d4649b78c2 --- /dev/null +++ b/src/test/ui/proc-macro/nonterminal-recollect-attr.rs @@ -0,0 +1,17 @@ +// check-pass +// aux-build:nonterminal-recollect-attr.rs + +extern crate nonterminal_recollect_attr; +use nonterminal_recollect_attr::*; + +macro_rules! my_macro { + ($v:ident) => { + #[first_attr] + $v struct Foo { + field: u8 + } + } +} + +my_macro!(pub); +fn main() {} |
