1010
1111use ast:: { self , Arg , Arm , Block , Expr , Item , Pat , Stmt , Ty } ;
1212use source_map:: respan;
13- use syntax_pos:: Span ;
13+ use syntax_pos:: { Span , DUMMY_SP } ;
1414use ext:: base:: ExtCtxt ;
1515use ext:: base;
1616use ext:: build:: AstBuilder ;
1717use parse:: parser:: { Parser , PathStyle } ;
1818use parse:: token;
1919use ptr:: P ;
20- use tokenstream:: { TokenStream , TokenTree } ;
20+ use tokenstream:: { DelimSpan , TokenStream , TokenTree } ;
2121
2222/// Quasiquoting works via token trees.
2323///
@@ -36,7 +36,7 @@ pub mod rt {
3636 use symbol:: Symbol ;
3737 use ThinVec ;
3838
39- use tokenstream:: { self , TokenTree , TokenStream } ;
39+ use tokenstream:: { self , DelimSpan , TokenTree , TokenStream } ;
4040
4141 pub use parse:: new_parser_from_tts;
4242 pub use syntax_pos:: { BytePos , Span , DUMMY_SP , FileName } ;
@@ -245,7 +245,8 @@ pub mod rt {
245245 }
246246 inner. push ( self . tokens . clone ( ) ) ;
247247
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 {
249250 delim : token:: Bracket , tts : TokenStream :: concat ( inner) . into ( )
250251 } ) ) ;
251252 r
@@ -261,7 +262,7 @@ pub mod rt {
261262
262263 impl ToTokens for ( ) {
263264 fn to_tokens ( & self , _cx : & ExtCtxt ) -> Vec < TokenTree > {
264- vec ! [ TokenTree :: Delimited ( DUMMY_SP , tokenstream:: Delimited {
265+ vec ! [ TokenTree :: Delimited ( DelimSpan :: dummy ( ) , tokenstream:: Delimited {
265266 delim: token:: Paren ,
266267 tts: TokenStream :: empty( ) . into( ) ,
267268 } ) ]
@@ -385,13 +386,16 @@ pub fn unflatten(tts: Vec<TokenTree>) -> Vec<TokenTree> {
385386
386387 let mut results = Vec :: new ( ) ;
387388 let mut result = Vec :: new ( ) ;
389+ let mut open_span = DUMMY_SP ;
388390 for tree in tts {
389391 match tree {
390- TokenTree :: Token ( _, token:: OpenDelim ( ..) ) => {
392+ TokenTree :: Token ( span, token:: OpenDelim ( ..) ) => {
393+ open_span = span;
391394 results. push ( :: std:: mem:: replace ( & mut result, Vec :: new ( ) ) ) ;
392395 }
393396 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 {
395399 delim,
396400 tts : result. into_iter ( ) . map ( TokenStream :: from) . collect :: < TokenStream > ( ) . into ( ) ,
397401 } ) ;
@@ -756,9 +760,9 @@ fn statements_mk_tt(cx: &ExtCtxt, tt: &TokenTree, quoted: bool) -> Vec<ast::Stmt
756760 vec ! [ cx. stmt_expr( e_push) ]
757761 } ,
758762 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 ) ;
760764 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 ) ) ;
762766 stmts
763767 }
764768 }
0 commit comments