10
10
11
11
use ast:: { self , Arg , Arm , Block , Expr , Item , Pat , Stmt , Ty } ;
12
12
use source_map:: respan;
13
- use syntax_pos:: Span ;
13
+ use syntax_pos:: { Span , DUMMY_SP } ;
14
14
use ext:: base:: ExtCtxt ;
15
15
use ext:: base;
16
16
use ext:: build:: AstBuilder ;
17
17
use parse:: parser:: { Parser , PathStyle } ;
18
18
use parse:: token;
19
19
use ptr:: P ;
20
- use tokenstream:: { TokenStream , TokenTree } ;
20
+ use tokenstream:: { DelimSpan , TokenStream , TokenTree } ;
21
21
22
22
/// Quasiquoting works via token trees.
23
23
///
@@ -36,7 +36,7 @@ pub mod rt {
36
36
use symbol:: Symbol ;
37
37
use ThinVec ;
38
38
39
- use tokenstream:: { self , TokenTree , TokenStream } ;
39
+ use tokenstream:: { self , DelimSpan , TokenTree , TokenStream } ;
40
40
41
41
pub use parse:: new_parser_from_tts;
42
42
pub use syntax_pos:: { BytePos , Span , DUMMY_SP , FileName } ;
@@ -245,7 +245,8 @@ pub mod rt {
245
245
}
246
246
inner. push ( self . tokens . clone ( ) ) ;
247
247
248
- r. push ( TokenTree :: Delimited ( self . span , tokenstream:: Delimited {
248
+ let delim_span = DelimSpan :: from_single ( self . span ) ;
249
+ r. push ( TokenTree :: Delimited ( delim_span, tokenstream:: Delimited {
249
250
delim : token:: Bracket , tts : TokenStream :: concat ( inner) . into ( )
250
251
} ) ) ;
251
252
r
@@ -261,7 +262,7 @@ pub mod rt {
261
262
262
263
impl ToTokens for ( ) {
263
264
fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
264
- vec ! [ TokenTree :: Delimited ( DUMMY_SP , tokenstream:: Delimited {
265
+ vec ! [ TokenTree :: Delimited ( DelimSpan :: dummy ( ) , tokenstream:: Delimited {
265
266
delim: token:: Paren ,
266
267
tts: TokenStream :: empty( ) . into( ) ,
267
268
} ) ]
@@ -385,13 +386,16 @@ pub fn unflatten(tts: Vec<TokenTree>) -> Vec<TokenTree> {
385
386
386
387
let mut results = Vec :: new ( ) ;
387
388
let mut result = Vec :: new ( ) ;
389
+ let mut open_span = DUMMY_SP ;
388
390
for tree in tts {
389
391
match tree {
390
- TokenTree :: Token ( _, token:: OpenDelim ( ..) ) => {
392
+ TokenTree :: Token ( span, token:: OpenDelim ( ..) ) => {
393
+ open_span = span;
391
394
results. push ( :: std:: mem:: replace ( & mut result, Vec :: new ( ) ) ) ;
392
395
}
393
396
TokenTree :: Token ( span, token:: CloseDelim ( delim) ) => {
394
- let tree = TokenTree :: Delimited ( span, Delimited {
397
+ let delim_span = DelimSpan :: from_pair ( open_span, span) ;
398
+ let tree = TokenTree :: Delimited ( delim_span, Delimited {
395
399
delim,
396
400
tts : result. into_iter ( ) . map ( TokenStream :: from) . collect :: < TokenStream > ( ) . into ( ) ,
397
401
} ) ;
@@ -756,9 +760,9 @@ fn statements_mk_tt(cx: &ExtCtxt, tt: &TokenTree, quoted: bool) -> Vec<ast::Stmt
756
760
vec ! [ cx. stmt_expr( e_push) ]
757
761
} ,
758
762
TokenTree :: Delimited ( span, ref delimed) => {
759
- let mut stmts = statements_mk_tt ( cx, & delimed. open_tt ( span) , false ) ;
763
+ let mut stmts = statements_mk_tt ( cx, & delimed. open_tt ( span. open ) , false ) ;
760
764
stmts. extend ( statements_mk_tts ( cx, delimed. stream ( ) ) ) ;
761
- stmts. extend ( statements_mk_tt ( cx, & delimed. close_tt ( span) , false ) ) ;
765
+ stmts. extend ( statements_mk_tt ( cx, & delimed. close_tt ( span. close ) , false ) ) ;
762
766
stmts
763
767
}
764
768
}
0 commit comments