2525//! ownership of the original.
2626
2727use ast:: { self , AttrStyle , LitKind } ;
28- use syntax_pos:: Span ;
28+ use syntax_pos:: { BytePos , Span , DUMMY_SP } ;
2929use codemap:: Spanned ;
3030use ext:: base;
3131use ext:: tt:: macro_parser;
@@ -45,12 +45,8 @@ use std::rc::Rc;
4545pub struct Delimited {
4646 /// The type of delimiter
4747 pub delim : token:: DelimToken ,
48- /// The span covering the opening delimiter
49- pub open_span : Span ,
5048 /// The delimited sequence of token trees
5149 pub tts : Vec < TokenTree > ,
52- /// The span covering the closing delimiter
53- pub close_span : Span ,
5450}
5551
5652impl Delimited {
@@ -65,13 +61,21 @@ impl Delimited {
6561 }
6662
6763 /// Returns the opening delimiter as a token tree.
68- pub fn open_tt ( & self ) -> TokenTree {
69- TokenTree :: Token ( self . open_span , self . open_token ( ) )
64+ pub fn open_tt ( & self , span : Span ) -> TokenTree {
65+ let open_span = match span {
66+ DUMMY_SP => DUMMY_SP ,
67+ _ => Span { hi : span. lo + BytePos ( self . delim . len ( ) ) , ..span } ,
68+ } ;
69+ TokenTree :: Token ( open_span, self . open_token ( ) )
7070 }
7171
7272 /// Returns the closing delimiter as a token tree.
73- pub fn close_tt ( & self ) -> TokenTree {
74- TokenTree :: Token ( self . close_span , self . close_token ( ) )
73+ pub fn close_tt ( & self , span : Span ) -> TokenTree {
74+ let close_span = match span {
75+ DUMMY_SP => DUMMY_SP ,
76+ _ => Span { lo : span. hi - BytePos ( self . delim . len ( ) ) , ..span } ,
77+ } ;
78+ TokenTree :: Token ( close_span, self . close_token ( ) )
7579 }
7680
7781 /// Returns the token trees inside the delimiters.
@@ -175,23 +179,21 @@ impl TokenTree {
175179
176180 TokenTree :: Delimited ( sp, Rc :: new ( Delimited {
177181 delim : token:: Bracket ,
178- open_span : sp,
179182 tts : vec ! [ TokenTree :: Token ( sp, token:: Ident ( ast:: Ident :: from_str( "doc" ) ) ) ,
180183 TokenTree :: Token ( sp, token:: Eq ) ,
181184 TokenTree :: Token ( sp, token:: Literal (
182185 token:: StrRaw ( Symbol :: intern( & stripped) , num_of_hashes) , None ) ) ] ,
183- close_span : sp,
184186 } ) )
185187 }
186188 ( & TokenTree :: Delimited ( _, ref delimed) , _) if delimed. delim == token:: NoDelim => {
187189 delimed. tts [ index] . clone ( )
188190 }
189- ( & TokenTree :: Delimited ( _ , ref delimed) , _) => {
191+ ( & TokenTree :: Delimited ( span , ref delimed) , _) => {
190192 if index == 0 {
191- return delimed. open_tt ( ) ;
193+ return delimed. open_tt ( span ) ;
192194 }
193195 if index == delimed. tts . len ( ) + 1 {
194- return delimed. close_tt ( ) ;
196+ return delimed. close_tt ( span ) ;
195197 }
196198 delimed. tts [ index - 1 ] . clone ( )
197199 }
0 commit comments