66
77use crate :: { Delimiter , Group , Ident , Literal , Punct , Spacing , Span , TokenStream , TokenTree } ;
88
9- macro_rules! quote_tt {
10- ( ( $( $t: tt) * ) ) => { Group :: new( Delimiter :: Parenthesis , quote !( $( $t) * ) ) } ;
11- ( [ $( $t: tt) * ] ) => { Group :: new( Delimiter :: Bracket , quote !( $( $t) * ) ) } ;
12- ( { $( $t: tt) * } ) => { Group :: new( Delimiter :: Brace , quote !( $( $t) * ) ) } ;
9+ macro_rules! minimal_quote_tt {
10+ ( ( $( $t: tt) * ) ) => { Group :: new( Delimiter :: Parenthesis , minimal_quote !( $( $t) * ) ) } ;
11+ ( [ $( $t: tt) * ] ) => { Group :: new( Delimiter :: Bracket , minimal_quote !( $( $t) * ) ) } ;
12+ ( { $( $t: tt) * } ) => { Group :: new( Delimiter :: Brace , minimal_quote !( $( $t) * ) ) } ;
1313 ( , ) => { Punct :: new( ',' , Spacing :: Alone ) } ;
1414 ( . ) => { Punct :: new( '.' , Spacing :: Alone ) } ;
1515 ( ; ) => { Punct :: new( ';' , Spacing :: Alone ) } ;
@@ -21,7 +21,7 @@ macro_rules! quote_tt {
2121 ( $i: ident) => { Ident :: new( stringify!( $i) , Span :: def_site( ) ) } ;
2222}
2323
24- macro_rules! quote_ts {
24+ macro_rules! minimal_quote_ts {
2525 ( ( @ $( $t: tt) * ) ) => { $( $t) * } ;
2626 ( :: ) => {
2727 [
@@ -35,7 +35,7 @@ macro_rules! quote_ts {
3535 } )
3636 . collect:: <TokenStream >( )
3737 } ;
38- ( $t: tt) => { TokenTree :: from( quote_tt !( $t) ) } ;
38+ ( $t: tt) => { TokenTree :: from( minimal_quote_tt !( $t) ) } ;
3939}
4040
4141/// Simpler version of the real `quote!` macro, implemented solely
@@ -46,11 +46,11 @@ macro_rules! quote_ts {
4646///
4747/// Note: supported tokens are a subset of the real `quote!`, but
4848/// unquoting is different: instead of `$x`, this uses `(@ expr)`.
49- macro_rules! quote {
49+ macro_rules! minimal_quote {
5050 ( ) => { TokenStream :: new( ) } ;
5151 ( $( $t: tt) * ) => {
5252 [
53- $( TokenStream :: from( quote_ts !( $t) ) , ) *
53+ $( TokenStream :: from( minimal_quote_ts !( $t) ) , ) *
5454 ] . iter( ) . cloned( ) . collect:: <TokenStream >( )
5555 } ;
5656}
@@ -62,9 +62,9 @@ macro_rules! quote {
6262#[ unstable( feature = "proc_macro_quote" , issue = "54722" ) ]
6363pub fn quote ( stream : TokenStream ) -> TokenStream {
6464 if stream. is_empty ( ) {
65- return quote ! ( crate :: TokenStream :: new( ) ) ;
65+ return minimal_quote ! ( crate :: TokenStream :: new( ) ) ;
6666 }
67- let proc_macro_crate = quote ! ( crate ) ;
67+ let proc_macro_crate = minimal_quote ! ( crate ) ;
6868 let mut after_dollar = false ;
6969 let tokens = stream
7070 . into_iter ( )
@@ -73,7 +73,7 @@ pub fn quote(stream: TokenStream) -> TokenStream {
7373 after_dollar = false ;
7474 match tree {
7575 TokenTree :: Ident ( _) => {
76- return Some ( quote ! ( Into :: <crate :: TokenStream >:: into(
76+ return Some ( minimal_quote ! ( Into :: <crate :: TokenStream >:: into(
7777 Clone :: clone( & ( @ tree) ) ) , ) ) ;
7878 }
7979 TokenTree :: Punct ( ref tt) if tt. as_char ( ) == '$' => { }
@@ -86,28 +86,28 @@ pub fn quote(stream: TokenStream) -> TokenStream {
8686 }
8787 }
8888
89- Some ( quote ! ( crate :: TokenStream :: from( ( @ match tree {
90- TokenTree :: Punct ( tt) => quote !( crate :: TokenTree :: Punct ( crate :: Punct :: new(
89+ Some ( minimal_quote ! ( crate :: TokenStream :: from( ( @ match tree {
90+ TokenTree :: Punct ( tt) => minimal_quote !( crate :: TokenTree :: Punct ( crate :: Punct :: new(
9191 ( @ TokenTree :: from( Literal :: character( tt. as_char( ) ) ) ) ,
9292 ( @ match tt. spacing( ) {
93- Spacing :: Alone => quote !( crate :: Spacing :: Alone ) ,
94- Spacing :: Joint => quote !( crate :: Spacing :: Joint ) ,
93+ Spacing :: Alone => minimal_quote !( crate :: Spacing :: Alone ) ,
94+ Spacing :: Joint => minimal_quote !( crate :: Spacing :: Joint ) ,
9595 } ) ,
9696 ) ) ) ,
97- TokenTree :: Group ( tt) => quote !( crate :: TokenTree :: Group ( crate :: Group :: new(
97+ TokenTree :: Group ( tt) => minimal_quote !( crate :: TokenTree :: Group ( crate :: Group :: new(
9898 ( @ match tt. delimiter( ) {
99- Delimiter :: Parenthesis => quote !( crate :: Delimiter :: Parenthesis ) ,
100- Delimiter :: Brace => quote !( crate :: Delimiter :: Brace ) ,
101- Delimiter :: Bracket => quote !( crate :: Delimiter :: Bracket ) ,
102- Delimiter :: None => quote !( crate :: Delimiter :: None ) ,
99+ Delimiter :: Parenthesis => minimal_quote !( crate :: Delimiter :: Parenthesis ) ,
100+ Delimiter :: Brace => minimal_quote !( crate :: Delimiter :: Brace ) ,
101+ Delimiter :: Bracket => minimal_quote !( crate :: Delimiter :: Bracket ) ,
102+ Delimiter :: None => minimal_quote !( crate :: Delimiter :: None ) ,
103103 } ) ,
104104 ( @ quote( tt. stream( ) ) ) ,
105105 ) ) ) ,
106- TokenTree :: Ident ( tt) => quote !( crate :: TokenTree :: Ident ( crate :: Ident :: new(
106+ TokenTree :: Ident ( tt) => minimal_quote !( crate :: TokenTree :: Ident ( crate :: Ident :: new(
107107 ( @ TokenTree :: from( Literal :: string( & tt. to_string( ) ) ) ) ,
108108 ( @ quote_span( proc_macro_crate. clone( ) , tt. span( ) ) ) ,
109109 ) ) ) ,
110- TokenTree :: Literal ( tt) => quote !( crate :: TokenTree :: Literal ( {
110+ TokenTree :: Literal ( tt) => minimal_quote !( crate :: TokenTree :: Literal ( {
111111 let mut iter = ( @ TokenTree :: from( Literal :: string( & tt. to_string( ) ) ) )
112112 . parse:: <crate :: TokenStream >( )
113113 . unwrap( )
@@ -129,13 +129,13 @@ pub fn quote(stream: TokenStream) -> TokenStream {
129129 panic ! ( "unexpected trailing `$` in `quote!`" ) ;
130130 }
131131
132- quote ! ( [ ( @ tokens) ] . iter( ) . cloned( ) . collect:: <crate :: TokenStream >( ) )
132+ minimal_quote ! ( [ ( @ tokens) ] . iter( ) . cloned( ) . collect:: <crate :: TokenStream >( ) )
133133}
134134
135135/// Quote a `Span` into a `TokenStream`.
136136/// This is needed to implement a custom quoter.
137137#[ unstable( feature = "proc_macro_quote" , issue = "54722" ) ]
138138pub fn quote_span ( proc_macro_crate : TokenStream , span : Span ) -> TokenStream {
139139 let id = span. save_span ( ) ;
140- quote ! ( ( @ proc_macro_crate ) :: Span :: recover_proc_macro_span( ( @ TokenTree :: from( Literal :: usize_unsuffixed( id) ) ) ) )
140+ minimal_quote ! ( ( @ proc_macro_crate ) :: Span :: recover_proc_macro_span( ( @ TokenTree :: from( Literal :: usize_unsuffixed( id) ) ) ) )
141141}
0 commit comments