@@ -80,67 +80,71 @@ pub mod rt {
80
80
81
81
impl ToTokens for ast:: Path {
82
82
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
83
- vec ! [ TokenTree :: Token ( DUMMY_SP ,
84
- token :: Interpolated ( token:: NtPath ( Box :: new( self . clone ( ) ) ) ) ) ]
83
+ let nt = token :: NtPath ( self . clone ( ) ) ;
84
+ vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( Rc :: new( nt ) ) ) ]
85
85
}
86
86
}
87
87
88
88
impl ToTokens for ast:: Ty {
89
89
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
90
- vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( token:: NtTy ( P ( self . clone( ) ) ) ) ) ]
90
+ let nt = token:: NtTy ( P ( self . clone ( ) ) ) ;
91
+ vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( Rc :: new( nt) ) ) ]
91
92
}
92
93
}
93
94
94
95
impl ToTokens for ast:: Block {
95
96
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
96
- vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( token:: NtBlock ( P ( self . clone( ) ) ) ) ) ]
97
+ let nt = token:: NtBlock ( P ( self . clone ( ) ) ) ;
98
+ vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( Rc :: new( nt) ) ) ]
97
99
}
98
100
}
99
101
100
102
impl ToTokens for ast:: Generics {
101
103
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
102
- vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( token:: NtGenerics ( self . clone( ) ) ) ) ]
104
+ let nt = token:: NtGenerics ( self . clone ( ) ) ;
105
+ vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( Rc :: new( nt) ) ) ]
103
106
}
104
107
}
105
108
106
109
impl ToTokens for ast:: WhereClause {
107
110
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
108
- vec ! [ TokenTree :: Token ( DUMMY_SP ,
109
- token:: Interpolated ( token :: NtWhereClause ( self . clone ( ) ) ) ) ]
111
+ let nt = token :: NtWhereClause ( self . clone ( ) ) ;
112
+ vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( Rc :: new ( nt ) ) ) ]
110
113
}
111
114
}
112
115
113
116
impl ToTokens for P < ast:: Item > {
114
117
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
115
- vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( token:: NtItem ( self . clone( ) ) ) ) ]
118
+ let nt = token:: NtItem ( self . clone ( ) ) ;
119
+ vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( Rc :: new( nt) ) ) ]
116
120
}
117
121
}
118
122
119
123
impl ToTokens for ast:: ImplItem {
120
124
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
121
- vec ! [ TokenTree :: Token ( self . span ,
122
- token:: Interpolated ( token :: NtImplItem ( P ( self . clone ( ) ) ) ) ) ]
125
+ let nt = token :: NtImplItem ( self . clone ( ) ) ;
126
+ vec ! [ TokenTree :: Token ( self . span , token:: Interpolated ( Rc :: new ( nt ) ) ) ]
123
127
}
124
128
}
125
129
126
130
impl ToTokens for P < ast:: ImplItem > {
127
131
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
128
- vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( token:: NtImplItem ( self . clone( ) ) ) ) ]
132
+ let nt = token:: NtImplItem ( ( * * self ) . clone ( ) ) ;
133
+ vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( Rc :: new( nt) ) ) ]
129
134
}
130
135
}
131
136
132
137
impl ToTokens for ast:: TraitItem {
133
138
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
134
- vec ! [ TokenTree :: Token ( self . span ,
135
- token:: Interpolated ( token :: NtTraitItem ( P ( self . clone ( ) ) ) ) ) ]
139
+ let nt = token :: NtTraitItem ( self . clone ( ) ) ;
140
+ vec ! [ TokenTree :: Token ( self . span , token:: Interpolated ( Rc :: new ( nt ) ) ) ]
136
141
}
137
142
}
138
143
139
144
impl ToTokens for ast:: Stmt {
140
145
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
141
- let mut tts = vec ! [
142
- TokenTree :: Token ( self . span, token:: Interpolated ( token:: NtStmt ( P ( self . clone( ) ) ) ) )
143
- ] ;
146
+ let nt = token:: NtStmt ( self . clone ( ) ) ;
147
+ let mut tts = vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( Rc :: new( nt) ) ) ] ;
144
148
145
149
// Some statements require a trailing semicolon.
146
150
if classify:: stmt_ends_with_semi ( & self . node ) {
@@ -153,31 +157,36 @@ pub mod rt {
153
157
154
158
impl ToTokens for P < ast:: Expr > {
155
159
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
156
- vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( token:: NtExpr ( self . clone( ) ) ) ) ]
160
+ let nt = token:: NtExpr ( self . clone ( ) ) ;
161
+ vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( Rc :: new( nt) ) ) ]
157
162
}
158
163
}
159
164
160
165
impl ToTokens for P < ast:: Pat > {
161
166
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
162
- vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( token:: NtPat ( self . clone( ) ) ) ) ]
167
+ let nt = token:: NtPat ( self . clone ( ) ) ;
168
+ vec ! [ TokenTree :: Token ( self . span, token:: Interpolated ( Rc :: new( nt) ) ) ]
163
169
}
164
170
}
165
171
166
172
impl ToTokens for ast:: Arm {
167
173
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
168
- vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( token:: NtArm ( self . clone( ) ) ) ) ]
174
+ let nt = token:: NtArm ( self . clone ( ) ) ;
175
+ vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( Rc :: new( nt) ) ) ]
169
176
}
170
177
}
171
178
172
179
impl ToTokens for ast:: Arg {
173
180
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
174
- vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( token:: NtArg ( self . clone( ) ) ) ) ]
181
+ let nt = token:: NtArg ( self . clone ( ) ) ;
182
+ vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( Rc :: new( nt) ) ) ]
175
183
}
176
184
}
177
185
178
186
impl ToTokens for P < ast:: Block > {
179
187
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
180
- vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( token:: NtBlock ( self . clone( ) ) ) ) ]
188
+ let nt = token:: NtBlock ( self . clone ( ) ) ;
189
+ vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( Rc :: new( nt) ) ) ]
181
190
}
182
191
}
183
192
@@ -204,7 +213,8 @@ pub mod rt {
204
213
205
214
impl ToTokens for P < ast:: MetaItem > {
206
215
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
207
- vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( token:: NtMeta ( self . clone( ) ) ) ) ]
216
+ let nt = token:: NtMeta ( self . clone ( ) ) ;
217
+ vec ! [ TokenTree :: Token ( DUMMY_SP , token:: Interpolated ( Rc :: new( nt) ) ) ]
208
218
}
209
219
}
210
220
0 commit comments