@@ -51,40 +51,39 @@ impl From<TokenStream> for proc_macro::TokenStream {
51
51
52
52
impl From < TokenTree > for TokenStream {
53
53
fn from ( token : TokenTree ) -> TokenStream {
54
- let ( span , kind ) = match token {
54
+ let tt : proc_macro :: TokenTree = match token {
55
55
TokenTree :: Group ( tt) => {
56
56
let delim = match tt. delimiter ( ) {
57
57
Delimiter :: Parenthesis => proc_macro:: Delimiter :: Parenthesis ,
58
58
Delimiter :: Bracket => proc_macro:: Delimiter :: Bracket ,
59
59
Delimiter :: Brace => proc_macro:: Delimiter :: Brace ,
60
60
Delimiter :: None => proc_macro:: Delimiter :: None ,
61
61
} ;
62
- let span = tt. span ( ) . inner ;
63
- let group = proc_macro:: TokenNode :: Group ( delim, tt. stream . inner . 0 ) ;
64
- ( span, group)
62
+ let span = tt. span ( ) ;
63
+ let mut group = proc_macro:: Group :: new ( delim, tt. stream . inner . 0 ) ;
64
+ group. set_span ( span. inner . 0 ) ;
65
+ group. into ( )
65
66
}
66
67
TokenTree :: Op ( tt) => {
67
- let kind = match tt. spacing ( ) {
68
+ let spacing = match tt. spacing ( ) {
68
69
Spacing :: Joint => proc_macro:: Spacing :: Joint ,
69
70
Spacing :: Alone => proc_macro:: Spacing :: Alone ,
70
71
} ;
71
- ( tt. span ( ) . inner , proc_macro:: TokenNode :: Op ( tt. op ( ) , kind) )
72
+ let mut op = proc_macro:: Op :: new ( tt. op ( ) , spacing) ;
73
+ op. set_span ( tt. span ( ) . inner . 0 ) ;
74
+ op. into ( )
72
75
}
73
- TokenTree :: Term ( tt) => ( tt. inner . span , proc_macro :: TokenNode :: Term ( tt . inner . term ) ) ,
74
- TokenTree :: Literal ( tt) => ( tt. inner . span , proc_macro :: TokenNode :: Literal ( tt . inner . lit ) ) ,
76
+ TokenTree :: Term ( tt) => tt. inner . term . into ( ) ,
77
+ TokenTree :: Literal ( tt) => tt. inner . lit . into ( ) ,
75
78
} ;
76
- TokenStream (
77
- proc_macro:: TokenTree {
78
- span : span. 0 ,
79
- kind,
80
- } . into ( ) ,
81
- )
79
+ TokenStream ( tt. into ( ) )
82
80
}
83
81
}
84
82
85
83
impl iter:: FromIterator < TokenTree > for TokenStream {
86
84
fn from_iter < I : IntoIterator < Item = TokenTree > > ( streams : I ) -> Self {
87
- let streams = streams. into_iter ( ) . map ( TokenStream :: from) ;
85
+ let streams = streams. into_iter ( ) . map ( TokenStream :: from)
86
+ . flat_map ( |t| t. 0 ) ;
88
87
TokenStream ( streams. collect :: < proc_macro:: TokenStream > ( ) )
89
88
}
90
89
}
@@ -101,7 +100,7 @@ impl fmt::Debug for LexError {
101
100
}
102
101
}
103
102
104
- pub struct TokenTreeIter ( proc_macro:: TokenTreeIter ) ;
103
+ pub struct TokenTreeIter ( proc_macro:: token_stream :: IntoIter ) ;
105
104
106
105
impl IntoIterator for TokenStream {
107
106
type Item = TokenTree ;
@@ -117,39 +116,36 @@ impl Iterator for TokenTreeIter {
117
116
118
117
fn next ( & mut self ) -> Option < TokenTree > {
119
118
let token = self . 0 . next ( ) ?;
120
- let span = :: Span :: _new ( Span ( token. span ) ) ;
121
- Some ( match token. kind {
122
- proc_macro:: TokenNode :: Group ( delim, s) => {
123
- let delim = match delim {
119
+ Some ( match token {
120
+ proc_macro:: TokenTree :: Group ( tt) => {
121
+ let delim = match tt. delimiter ( ) {
124
122
proc_macro:: Delimiter :: Parenthesis => Delimiter :: Parenthesis ,
125
123
proc_macro:: Delimiter :: Bracket => Delimiter :: Bracket ,
126
124
proc_macro:: Delimiter :: Brace => Delimiter :: Brace ,
127
125
proc_macro:: Delimiter :: None => Delimiter :: None ,
128
126
} ;
129
- let stream = :: TokenStream :: _new ( TokenStream ( s ) ) ;
127
+ let stream = :: TokenStream :: _new ( TokenStream ( tt . stream ( ) ) ) ;
130
128
let mut g = Group :: new ( delim, stream) ;
131
- g. set_span ( span) ;
129
+ g. set_span ( :: Span :: _new ( Span ( tt . span ( ) ) ) ) ;
132
130
g. into ( )
133
131
}
134
- proc_macro:: TokenNode :: Op ( ch , kind ) => {
135
- let kind = match kind {
132
+ proc_macro:: TokenTree :: Op ( tt ) => {
133
+ let spacing = match tt . spacing ( ) {
136
134
proc_macro:: Spacing :: Joint => Spacing :: Joint ,
137
135
proc_macro:: Spacing :: Alone => Spacing :: Alone ,
138
136
} ;
139
- let mut o = Op :: new ( ch , kind ) ;
140
- o. span = span ;
137
+ let mut o = Op :: new ( tt . op ( ) , spacing ) ;
138
+ o. set_span ( :: Span :: _new ( Span ( tt . span ( ) ) ) ) ;
141
139
o. into ( )
142
140
}
143
- proc_macro:: TokenNode :: Term ( s) => {
141
+ proc_macro:: TokenTree :: Term ( s) => {
144
142
:: Term :: _new ( Term {
145
143
term : s,
146
- span : span. inner ,
147
144
} ) . into ( )
148
145
}
149
- proc_macro:: TokenNode :: Literal ( l) => {
146
+ proc_macro:: TokenTree :: Literal ( l) => {
150
147
:: Literal :: _new ( Literal {
151
148
lit : l,
152
- span : span. inner ,
153
149
} ) . into ( )
154
150
}
155
151
} )
@@ -213,7 +209,7 @@ pub struct LineColumn {
213
209
pub column : usize ,
214
210
}
215
211
216
- #[ derive( Copy , Clone , PartialEq , Eq ) ]
212
+ #[ derive( Copy , Clone ) ]
217
213
pub struct Span ( proc_macro:: Span ) ;
218
214
219
215
impl From < proc_macro:: Span > for :: Span {
@@ -271,14 +267,12 @@ impl fmt::Debug for Span {
271
267
#[ derive( Copy , Clone ) ]
272
268
pub struct Term {
273
269
term : proc_macro:: Term ,
274
- span : Span ,
275
270
}
276
271
277
272
impl Term {
278
273
pub fn new ( string : & str , span : Span ) -> Term {
279
274
Term {
280
- term : proc_macro:: Term :: intern ( string) ,
281
- span,
275
+ term : proc_macro:: Term :: new ( string, span. 0 ) ,
282
276
}
283
277
}
284
278
@@ -287,11 +281,11 @@ impl Term {
287
281
}
288
282
289
283
pub fn span ( & self ) -> Span {
290
- self . span
284
+ Span ( self . term . span ( ) )
291
285
}
292
286
293
287
pub fn set_span ( & mut self , span : Span ) {
294
- self . span = span ;
288
+ self . term . set_span ( span. 0 ) ;
295
289
}
296
290
}
297
291
@@ -304,21 +298,20 @@ impl fmt::Debug for Term {
304
298
#[ derive( Clone ) ]
305
299
pub struct Literal {
306
300
lit : proc_macro:: Literal ,
307
- span : Span ,
308
301
}
309
302
310
303
macro_rules! suffixed_numbers {
311
304
( $( $name: ident => $kind: ident, ) * ) => ( $(
312
305
pub fn $name( n: $kind) -> Literal {
313
- Literal :: _new( proc_macro:: Literal :: $kind ( n) )
306
+ Literal :: _new( proc_macro:: Literal :: $name ( n) )
314
307
}
315
308
) * )
316
309
}
317
310
318
311
macro_rules! unsuffixed_integers {
319
312
( $( $name: ident => $kind: ident, ) * ) => ( $(
320
313
pub fn $name( n: $kind) -> Literal {
321
- Literal :: _new( proc_macro:: Literal :: integer ( n as i128 ) )
314
+ Literal :: _new( proc_macro:: Literal :: $name ( n ) )
322
315
}
323
316
) * )
324
317
}
@@ -327,7 +320,6 @@ impl Literal {
327
320
fn _new ( lit : proc_macro:: Literal ) -> Literal {
328
321
Literal {
329
322
lit,
330
- span : Span :: call_site ( ) ,
331
323
}
332
324
}
333
325
@@ -361,11 +353,11 @@ impl Literal {
361
353
}
362
354
363
355
pub fn f32_unsuffixed ( f : f32 ) -> Literal {
364
- Literal :: f64_unsuffixed ( f . into ( ) )
356
+ Literal :: _new ( proc_macro :: Literal :: f32_unsuffixed ( f ) )
365
357
}
366
358
367
359
pub fn f64_unsuffixed ( f : f64 ) -> Literal {
368
- Literal :: _new ( proc_macro:: Literal :: float ( f) )
360
+ Literal :: _new ( proc_macro:: Literal :: f64_unsuffixed ( f) )
369
361
}
370
362
371
363
@@ -382,11 +374,11 @@ impl Literal {
382
374
}
383
375
384
376
pub fn span ( & self ) -> Span {
385
- self . span
377
+ Span ( self . lit . span ( ) )
386
378
}
387
379
388
380
pub fn set_span ( & mut self , span : Span ) {
389
- self . span = span ;
381
+ self . lit . set_span ( span. 0 ) ;
390
382
}
391
383
}
392
384
0 commit comments