@@ -18,6 +18,7 @@ pub(crate) fn dollar_crate(span: Span) -> tt::Ident<Span> {
1818// 2. #()* pattern repetition not supported now
1919// * But we can do it manually, see `test_quote_derive_copy_hack`
2020#[ doc( hidden) ]
21+ #[ macro_export]
2122macro_rules! quote_impl__ {
2223 ( $span: ident) => {
2324 Vec :: <$crate:: tt:: TokenTree >:: new( )
@@ -27,8 +28,8 @@ macro_rules! quote_impl__ {
2728 {
2829 let children = $crate:: builtin:: quote:: __quote!( $span $( $tt) * ) ;
2930 $crate:: tt:: Subtree {
30- delimiter: crate :: tt:: Delimiter {
31- kind: crate :: tt:: DelimiterKind :: $delim,
31+ delimiter: $ crate:: tt:: Delimiter {
32+ kind: $ crate:: tt:: DelimiterKind :: $delim,
3233 open: $span,
3334 close: $span,
3435 } ,
@@ -40,9 +41,9 @@ macro_rules! quote_impl__ {
4041 ( @PUNCT ( $span: ident) $first: literal ) => {
4142 {
4243 vec![
43- crate :: tt:: Leaf :: Punct ( crate :: tt:: Punct {
44+ $ crate:: tt:: Leaf :: Punct ( $ crate:: tt:: Punct {
4445 char : $first,
45- spacing: crate :: tt:: Spacing :: Alone ,
46+ spacing: $ crate:: tt:: Spacing :: Alone ,
4647 span: $span,
4748 } ) . into( )
4849 ]
@@ -52,14 +53,14 @@ macro_rules! quote_impl__ {
5253 ( @PUNCT ( $span: ident) $first: literal, $sec: literal ) => {
5354 {
5455 vec![
55- crate :: tt:: Leaf :: Punct ( crate :: tt:: Punct {
56+ $ crate:: tt:: Leaf :: Punct ( $ crate:: tt:: Punct {
5657 char : $first,
57- spacing: crate :: tt:: Spacing :: Joint ,
58+ spacing: $ crate:: tt:: Spacing :: Joint ,
5859 span: $span,
5960 } ) . into( ) ,
60- crate :: tt:: Leaf :: Punct ( crate :: tt:: Punct {
61+ $ crate:: tt:: Leaf :: Punct ( $ crate:: tt:: Punct {
6162 char : $sec,
62- spacing: crate :: tt:: Spacing :: Alone ,
63+ spacing: $ crate:: tt:: Spacing :: Alone ,
6364 span: $span,
6465 } ) . into( )
6566 ]
@@ -98,7 +99,7 @@ macro_rules! quote_impl__ {
9899 // Ident
99100 ( $span: ident $tt: ident ) => {
100101 vec![ {
101- crate :: tt:: Leaf :: Ident ( crate :: tt:: Ident {
102+ $ crate:: tt:: Leaf :: Ident ( $ crate:: tt:: Ident {
102103 sym: intern:: Symbol :: intern( stringify!( $tt) ) ,
103104 span: $span,
104105 is_raw: tt:: IdentIsRaw :: No ,
@@ -109,6 +110,7 @@ macro_rules! quote_impl__ {
109110 // Puncts
110111 // FIXME: Not all puncts are handled
111112 ( $span: ident -> ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '-' , '>' ) } ;
113+ ( $span: ident => ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '=' , '>' ) } ;
112114 ( $span: ident & ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '&' ) } ;
113115 ( $span: ident , ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) ',' ) } ;
114116 ( $span: ident : ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) ':' ) } ;
@@ -118,6 +120,9 @@ macro_rules! quote_impl__ {
118120 ( $span: ident < ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '<' ) } ;
119121 ( $span: ident > ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '>' ) } ;
120122 ( $span: ident ! ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '!' ) } ;
123+ ( $span: ident # ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '#' ) } ;
124+ ( $span: ident $ ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '$' ) } ;
125+ ( $span: ident * ) => { $crate:: builtin:: quote:: __quote!( @PUNCT ( $span) '*' ) } ;
121126
122127 ( $span: ident $first: tt $( $tail: tt) + ) => {
123128 {
@@ -129,18 +134,19 @@ macro_rules! quote_impl__ {
129134 }
130135 } ;
131136}
132- pub ( super ) use quote_impl__ as __quote;
137+ pub use quote_impl__ as __quote;
133138
134139/// FIXME:
135140/// It probably should implement in proc-macro
136- macro_rules! quote_impl {
141+ #[ macro_export]
142+ macro_rules! quote {
137143 ( $span: ident=> $( $tt: tt) * ) => {
138144 $crate:: builtin:: quote:: IntoTt :: to_subtree( $crate:: builtin:: quote:: __quote!( $span $( $tt) * ) , $span)
139145 }
140146}
141- pub ( super ) use quote_impl as quote;
147+ pub ( super ) use quote;
142148
143- pub ( crate ) trait IntoTt {
149+ pub trait IntoTt {
144150 fn to_subtree ( self , span : Span ) -> crate :: tt:: Subtree ;
145151 fn to_tokens ( self ) -> Vec < crate :: tt:: TokenTree > ;
146152}
@@ -168,7 +174,7 @@ impl IntoTt for crate::tt::Subtree {
168174 }
169175}
170176
171- pub ( crate ) trait ToTokenTree {
177+ pub trait ToTokenTree {
172178 fn to_token ( self , span : Span ) -> crate :: tt:: TokenTree ;
173179}
174180
0 commit comments