25
25
//! ownership of the original.
26
26
27
27
use ast:: { self , AttrStyle , LitKind } ;
28
- use syntax_pos:: Span ;
28
+ use syntax_pos:: { BytePos , Span , DUMMY_SP } ;
29
29
use codemap:: Spanned ;
30
30
use ext:: base;
31
31
use ext:: tt:: macro_parser;
@@ -45,12 +45,8 @@ use std::rc::Rc;
45
45
pub struct Delimited {
46
46
/// The type of delimiter
47
47
pub delim : token:: DelimToken ,
48
- /// The span covering the opening delimiter
49
- pub open_span : Span ,
50
48
/// The delimited sequence of token trees
51
49
pub tts : Vec < TokenTree > ,
52
- /// The span covering the closing delimiter
53
- pub close_span : Span ,
54
50
}
55
51
56
52
impl Delimited {
@@ -65,13 +61,21 @@ impl Delimited {
65
61
}
66
62
67
63
/// 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 ( ) )
70
70
}
71
71
72
72
/// 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 ( ) )
75
79
}
76
80
77
81
/// Returns the token trees inside the delimiters.
@@ -175,23 +179,21 @@ impl TokenTree {
175
179
176
180
TokenTree :: Delimited ( sp, Rc :: new ( Delimited {
177
181
delim : token:: Bracket ,
178
- open_span : sp,
179
182
tts : vec ! [ TokenTree :: Token ( sp, token:: Ident ( ast:: Ident :: from_str( "doc" ) ) ) ,
180
183
TokenTree :: Token ( sp, token:: Eq ) ,
181
184
TokenTree :: Token ( sp, token:: Literal (
182
185
token:: StrRaw ( Symbol :: intern( & stripped) , num_of_hashes) , None ) ) ] ,
183
- close_span : sp,
184
186
} ) )
185
187
}
186
188
( & TokenTree :: Delimited ( _, ref delimed) , _) if delimed. delim == token:: NoDelim => {
187
189
delimed. tts [ index] . clone ( )
188
190
}
189
- ( & TokenTree :: Delimited ( _ , ref delimed) , _) => {
191
+ ( & TokenTree :: Delimited ( span , ref delimed) , _) => {
190
192
if index == 0 {
191
- return delimed. open_tt ( ) ;
193
+ return delimed. open_tt ( span ) ;
192
194
}
193
195
if index == delimed. tts . len ( ) + 1 {
194
- return delimed. close_tt ( ) ;
196
+ return delimed. close_tt ( span ) ;
195
197
}
196
198
delimed. tts [ index - 1 ] . clone ( )
197
199
}
0 commit comments