Skip to content

Commit 519aec5

Browse files
committed
proc_macro: Use ToTokens trait in quote macro
1 parent 904d8f6 commit 519aec5

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

library/proc_macro/src/quote.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
//! This quasiquoter uses macros 2.0 hygiene to reliably access
55
//! items from `proc_macro`, to build a `proc_macro::TokenStream`.
66
7-
use crate::{Delimiter, Group, Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree};
7+
use crate::{
8+
Delimiter, Group, Ident, Literal, Punct, Spacing, Span, ToTokens, TokenStream, TokenTree,
9+
};
810

911
macro_rules! quote_tt {
1012
(($($t:tt)*)) => { Group::new(Delimiter::Parenthesis, quote!($($t)*)) };
@@ -50,7 +52,7 @@ macro_rules! quote {
5052
() => { TokenStream::new() };
5153
($($t:tt)*) => {
5254
[
53-
$(TokenStream::from(quote_ts!($t)),)*
55+
$(ToTokens::into_token_stream(quote_ts!($t)),)*
5456
].iter().cloned().collect::<TokenStream>()
5557
};
5658
}
@@ -73,7 +75,7 @@ pub fn quote(stream: TokenStream) -> TokenStream {
7375
after_dollar = false;
7476
match tree {
7577
TokenTree::Ident(_) => {
76-
return Some(quote!(Into::<crate::TokenStream>::into(
78+
return Some(quote!(ToTokens::into_token_stream(
7779
Clone::clone(&(@ tree))),));
7880
}
7981
TokenTree::Punct(ref tt) if tt.as_char() == '$' => {}
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//@ check-pass
2+
3+
#![feature(proc_macro_quote)]
4+
#![feature(proc_macro_totokens)]
5+
#![crate_type = "proc-macro"]
6+
7+
extern crate proc_macro;
8+
9+
use proc_macro::*;
10+
11+
fn main() {
12+
let x = Ident::new("foo", Span::call_site());
13+
let _ = quote! {
14+
let $x = 199;
15+
};
16+
}

0 commit comments

Comments
 (0)