Skip to content

Commit 49f5b0a

Browse files
committed
Remove open_span and close_span from Delimited.
1 parent 31417ef commit 49f5b0a

File tree

10 files changed

+35
-55
lines changed

10 files changed

+35
-55
lines changed

Diff for: src/libproc_macro_plugin/qquote.rs

-4
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ fn delimit(delim: token::DelimToken, stream: TokenStream) -> TokenStream {
5252
TokenTree::Delimited(DUMMY_SP, Rc::new(Delimited {
5353
delim: delim,
5454
tts: stream.trees().cloned().collect(),
55-
open_span: DUMMY_SP,
56-
close_span: DUMMY_SP,
5755
})).into()
5856
}
5957

@@ -129,8 +127,6 @@ impl Quote for TokenTree {
129127
impl Quote for Rc<Delimited> {
130128
fn quote(&self) -> TokenStream {
131129
quote!(::std::rc::Rc::new(::syntax::tokenstream::Delimited {
132-
open_span: ::syntax::ext::quote::rt::DUMMY_SP,
133-
close_span: ::syntax::ext::quote::rt::DUMMY_SP,
134130
delim: (quote self.delim),
135131
tts: (quote self.tts),
136132
}))

Diff for: src/librustc_incremental/calculate_svh/svh_visitor.rs

-4
Original file line numberDiff line numberDiff line change
@@ -1034,18 +1034,14 @@ impl<'a, 'hash, 'tcx> StrictVersionHashVisitor<'a, 'hash, 'tcx> {
10341034
hash_span!(self, span);
10351035
let tokenstream::Delimited {
10361036
ref delim,
1037-
open_span,
10381037
ref tts,
1039-
close_span,
10401038
} = **delimited;
10411039

10421040
delim.hash(self.st);
1043-
hash_span!(self, open_span);
10441041
tts.len().hash(self.st);
10451042
for sub_tt in tts {
10461043
self.hash_token_tree(sub_tt);
10471044
}
1048-
hash_span!(self, close_span);
10491045
}
10501046
tokenstream::TokenTree::Sequence(span, ref sequence_repetition) => {
10511047
hash_span!(self, span);

Diff for: src/libsyntax/ext/quote.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,7 @@ pub mod rt {
231231
}
232232
r.push(TokenTree::Delimited(self.span, Rc::new(tokenstream::Delimited {
233233
delim: token::Bracket,
234-
open_span: self.span,
235234
tts: self.value.to_tokens(cx),
236-
close_span: self.span,
237235
})));
238236
r
239237
}
@@ -250,9 +248,7 @@ pub mod rt {
250248
fn to_tokens(&self, _cx: &ExtCtxt) -> Vec<TokenTree> {
251249
vec![TokenTree::Delimited(DUMMY_SP, Rc::new(tokenstream::Delimited {
252250
delim: token::Paren,
253-
open_span: DUMMY_SP,
254251
tts: vec![],
255-
close_span: DUMMY_SP,
256252
}))]
257253
}
258254
}
@@ -757,11 +753,11 @@ fn statements_mk_tt(cx: &ExtCtxt, tt: &TokenTree, matcher: bool) -> Vec<ast::Stm
757753
vec![e_tok]);
758754
vec![cx.stmt_expr(e_push)]
759755
},
760-
TokenTree::Delimited(_, ref delimed) => {
761-
statements_mk_tt(cx, &delimed.open_tt(), matcher).into_iter()
756+
TokenTree::Delimited(span, ref delimed) => {
757+
statements_mk_tt(cx, &delimed.open_tt(span), matcher).into_iter()
762758
.chain(delimed.tts.iter()
763759
.flat_map(|tt| statements_mk_tt(cx, tt, matcher)))
764-
.chain(statements_mk_tt(cx, &delimed.close_tt(), matcher))
760+
.chain(statements_mk_tt(cx, &delimed.close_tt(span), matcher))
765761
.collect()
766762
},
767763
TokenTree::Sequence(sp, ref seq) => {

Diff for: src/libsyntax/ext/tt/macro_rules.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -350,9 +350,9 @@ impl FirstSets {
350350
TokenTree::Token(sp, ref tok) => {
351351
first.replace_with((sp, tok.clone()));
352352
}
353-
TokenTree::Delimited(_, ref delimited) => {
353+
TokenTree::Delimited(span, ref delimited) => {
354354
build_recur(sets, &delimited.tts[..]);
355-
first.replace_with((delimited.open_span,
355+
first.replace_with((delimited.open_tt(span).span(),
356356
Token::OpenDelim(delimited.delim)));
357357
}
358358
TokenTree::Sequence(sp, ref seq_rep) => {
@@ -410,8 +410,8 @@ impl FirstSets {
410410
first.add_one((sp, tok.clone()));
411411
return first;
412412
}
413-
TokenTree::Delimited(_, ref delimited) => {
414-
first.add_one((delimited.open_span,
413+
TokenTree::Delimited(span, ref delimited) => {
414+
first.add_one((delimited.open_tt(span).span(),
415415
Token::OpenDelim(delimited.delim)));
416416
return first;
417417
}
@@ -603,8 +603,9 @@ fn check_matcher_core(sess: &ParseSess,
603603
suffix_first = build_suffix_first();
604604
}
605605
}
606-
TokenTree::Delimited(_, ref d) => {
607-
let my_suffix = TokenSet::singleton((d.close_span, Token::CloseDelim(d.delim)));
606+
TokenTree::Delimited(span, ref d) => {
607+
let my_suffix = TokenSet::singleton((d.close_tt(span).span(),
608+
Token::CloseDelim(d.delim)));
608609
check_matcher_core(sess, first_sets, &d.tts, &my_suffix);
609610
// don't track non NT tokens
610611
last.replace_with_irrelevant();

Diff for: src/libsyntax/fold.rs

-2
Original file line numberDiff line numberDiff line change
@@ -543,9 +543,7 @@ pub fn noop_fold_tt<T: Folder>(tt: &TokenTree, fld: &mut T) -> TokenTree {
543543
TokenTree::Delimited(fld.new_span(span), Rc::new(
544544
Delimited {
545545
delim: delimed.delim,
546-
open_span: fld.new_span(delimed.open_span),
547546
tts: fld.fold_tts(&delimed.tts),
548-
close_span: fld.new_span(delimed.close_span),
549547
}
550548
))
551549
},

Diff for: src/libsyntax/parse/lexer/tokentrees.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,15 @@ impl<'a> StringReader<'a> {
5959

6060
// Parse the open delimiter.
6161
self.open_braces.push((delim, self.span));
62-
let open_span = self.span;
6362
self.real_token();
6463

6564
// Parse the token trees within the delimiters.
6665
// We stop at any delimiter so we can try to recover if the user
6766
// uses an incorrect delimiter.
6867
let tts = self.parse_token_trees_until_close_delim();
6968

70-
let close_span = self.span;
7169
// Expand to cover the entire delimited token tree
72-
let span = Span { hi: close_span.hi, ..pre_span };
70+
let span = Span { hi: self.span.hi, ..pre_span };
7371

7472
match self.token {
7573
// Correct delimiter.
@@ -115,9 +113,7 @@ impl<'a> StringReader<'a> {
115113

116114
Ok(TokenTree::Delimited(span, Rc::new(Delimited {
117115
delim: delim,
118-
open_span: open_span,
119116
tts: tts,
120-
close_span: close_span,
121117
})))
122118
},
123119
token::CloseDelim(_) => {

Diff for: src/libsyntax/parse/mod.rs

-4
Original file line numberDiff line numberDiff line change
@@ -725,24 +725,20 @@ mod tests {
725725
sp(5, 14),
726726
Rc::new(tokenstream::Delimited {
727727
delim: token::DelimToken::Paren,
728-
open_span: sp(5, 6),
729728
tts: vec![
730729
TokenTree::Token(sp(6, 7), token::Ident(Ident::from_str("b"))),
731730
TokenTree::Token(sp(8, 9), token::Colon),
732731
TokenTree::Token(sp(10, 13), token::Ident(Ident::from_str("i32"))),
733732
],
734-
close_span: sp(13, 14),
735733
})),
736734
TokenTree::Delimited(
737735
sp(15, 21),
738736
Rc::new(tokenstream::Delimited {
739737
delim: token::DelimToken::Brace,
740-
open_span: sp(15, 16),
741738
tts: vec![
742739
TokenTree::Token(sp(17, 18), token::Ident(Ident::from_str("b"))),
743740
TokenTree::Token(sp(18, 19), token::Semi),
744741
],
745-
close_span: sp(20, 21),
746742
}))
747743
];
748744

Diff for: src/libsyntax/parse/parser.rs

+2-9
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,7 @@ impl<'a> Parser<'a> {
254254
-> Self {
255255
let tt = TokenTree::Delimited(syntax_pos::DUMMY_SP, Rc::new(Delimited {
256256
delim: token::NoDelim,
257-
open_span: syntax_pos::DUMMY_SP,
258257
tts: tokens,
259-
close_span: syntax_pos::DUMMY_SP,
260258
}));
261259
let mut parser = Parser {
262260
sess: sess,
@@ -2717,7 +2715,7 @@ impl<'a> Parser<'a> {
27172715
}
27182716

27192717
let parsing_token_tree = ::std::mem::replace(&mut self.parsing_token_tree, true);
2720-
let open_span = self.span;
2718+
let lo = self.span.lo;
27212719
self.bump();
27222720
let tts = self.parse_seq_to_before_tokens(&[&token::CloseDelim(token::Brace),
27232721
&token::CloseDelim(token::Paren),
@@ -2726,16 +2724,11 @@ impl<'a> Parser<'a> {
27262724
|p| p.parse_token_tree(),
27272725
|mut e| e.emit());
27282726
self.parsing_token_tree = parsing_token_tree;
2729-
2730-
let close_span = self.span;
27312727
self.bump();
27322728

2733-
let span = Span { lo: open_span.lo, ..close_span };
2734-
Ok(TokenTree::Delimited(span, Rc::new(Delimited {
2729+
Ok(TokenTree::Delimited(Span { lo: lo, ..self.prev_span }, Rc::new(Delimited {
27352730
delim: delim,
2736-
open_span: open_span,
27372731
tts: tts,
2738-
close_span: close_span,
27392732
})))
27402733
},
27412734
token::CloseDelim(_) | token::Eof => unreachable!(),

Diff for: src/libsyntax/parse/token.rs

+6
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ pub enum DelimToken {
4949
NoDelim,
5050
}
5151

52+
impl DelimToken {
53+
pub fn len(&self) -> u32 {
54+
if *self == NoDelim { 0 } else { 1 }
55+
}
56+
}
57+
5258
#[derive(Clone, RustcEncodable, RustcDecodable, PartialEq, Eq, Hash, Debug, Copy)]
5359
pub enum Lit {
5460
Byte(ast::Name),

Diff for: src/libsyntax/tokenstream.rs

+16-14
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
//! ownership of the original.
2626
2727
use ast::{self, AttrStyle, LitKind};
28-
use syntax_pos::Span;
28+
use syntax_pos::{BytePos, Span, DUMMY_SP};
2929
use codemap::Spanned;
3030
use ext::base;
3131
use ext::tt::macro_parser;
@@ -45,12 +45,8 @@ use std::rc::Rc;
4545
pub 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

5652
impl 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

Comments
 (0)