Skip to content

Commit ce0d994

Browse files
committed
Remove ThinTokenStream.
`TokenStream` is now almost identical to `ThinTokenStream`. This commit removes the latter, replacing it with the former.
1 parent 28966e1 commit ce0d994

File tree

11 files changed

+23
-72
lines changed

11 files changed

+23
-72
lines changed

src/librustc/ich/impls_syntax.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ for tokenstream::TokenTree {
258258
tokenstream::TokenTree::Delimited(span, delim, ref tts) => {
259259
span.hash_stable(hcx, hasher);
260260
std_hash::Hash::hash(&delim, hasher);
261-
for sub_tt in tts.stream().trees() {
261+
for sub_tt in tts.trees() {
262262
sub_tt.hash_stable(hcx, hasher);
263263
}
264264
}

src/librustc_lint/builtin.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1540,7 +1540,7 @@ impl KeywordIdents {
15401540
_ => {},
15411541
}
15421542
TokenTree::Delimited(_, _, tts) => {
1543-
self.check_tokens(cx, tts.stream())
1543+
self.check_tokens(cx, tts)
15441544
},
15451545
}
15461546
}

src/libsyntax/ast.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use rustc_target::spec::abi::Abi;
1515
use source_map::{dummy_spanned, respan, Spanned};
1616
use symbol::{keywords, Symbol};
1717
use syntax_pos::{Span, DUMMY_SP};
18-
use tokenstream::{ThinTokenStream, TokenStream};
18+
use tokenstream::TokenStream;
1919
use ThinVec;
2020

2121
use rustc_data_structures::fx::FxHashSet;
@@ -1216,7 +1216,7 @@ pub type Mac = Spanned<Mac_>;
12161216
pub struct Mac_ {
12171217
pub path: Path,
12181218
pub delim: MacDelimiter,
1219-
pub tts: ThinTokenStream,
1219+
pub tts: TokenStream,
12201220
}
12211221

12221222
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Debug)]
@@ -1228,13 +1228,13 @@ pub enum MacDelimiter {
12281228

12291229
impl Mac_ {
12301230
pub fn stream(&self) -> TokenStream {
1231-
self.tts.stream()
1231+
self.tts.clone()
12321232
}
12331233
}
12341234

12351235
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
12361236
pub struct MacroDef {
1237-
pub tokens: ThinTokenStream,
1237+
pub tokens: TokenStream,
12381238
pub legacy: bool,
12391239
}
12401240

src/libsyntax/attr/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ impl MetaItemKind {
565565
}
566566
Some(TokenTree::Delimited(_, delim, ref tts)) if delim == token::Paren => {
567567
tokens.next();
568-
tts.stream()
568+
tts.clone()
569569
}
570570
_ => return Some(MetaItemKind::Word),
571571
};

src/libsyntax/ext/quote.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ fn statements_mk_tt(cx: &ExtCtxt, tt: &TokenTree, quoted: bool) -> Vec<ast::Stmt
748748
},
749749
TokenTree::Delimited(span, delim, ref tts) => {
750750
let mut stmts = statements_mk_tt(cx, &TokenTree::open_tt(span.open, delim), false);
751-
stmts.extend(statements_mk_tts(cx, tts.stream()));
751+
stmts.extend(statements_mk_tts(cx, tts.clone()));
752752
stmts.extend(statements_mk_tt(cx, &TokenTree::close_tt(span.close, delim), false));
753753
stmts
754754
}

src/libsyntax/fold.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ pub fn noop_fold_tt<T: Folder>(tt: TokenTree, fld: &mut T) -> TokenTree {
598598
TokenTree::Delimited(span, delim, tts) => TokenTree::Delimited(
599599
DelimSpan::from_pair(fld.new_span(span.open), fld.new_span(span.close)),
600600
delim,
601-
fld.fold_tts(tts.stream()).into(),
601+
fld.fold_tts(tts).into(),
602602
),
603603
}
604604
}

src/libsyntax/parse/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ mod tests {
811811
)
812812
if name_macro_rules.name == "macro_rules"
813813
&& name_zip.name == "zip" => {
814-
let tts = &macro_tts.stream().trees().collect::<Vec<_>>();
814+
let tts = &macro_tts.trees().collect::<Vec<_>>();
815815
match (tts.len(), tts.get(0), tts.get(1), tts.get(2)) {
816816
(
817817
3,
@@ -820,7 +820,7 @@ mod tests {
820820
Some(&TokenTree::Delimited(_, second_delim, ref second_tts)),
821821
)
822822
if macro_delim == token::Paren => {
823-
let tts = &first_tts.stream().trees().collect::<Vec<_>>();
823+
let tts = &first_tts.trees().collect::<Vec<_>>();
824824
match (tts.len(), tts.get(0), tts.get(1)) {
825825
(
826826
2,
@@ -830,7 +830,7 @@ mod tests {
830830
if first_delim == token::Paren && ident.name == "a" => {},
831831
_ => panic!("value 3: {:?} {:?}", first_delim, first_tts),
832832
}
833-
let tts = &second_tts.stream().trees().collect::<Vec<_>>();
833+
let tts = &second_tts.trees().collect::<Vec<_>>();
834834
match (tts.len(), tts.get(0), tts.get(1)) {
835835
(
836836
2,

src/libsyntax/parse/parser.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ use print::pprust;
4646
use ptr::P;
4747
use parse::PResult;
4848
use ThinVec;
49-
use tokenstream::{self, DelimSpan, ThinTokenStream, TokenTree, TokenStream};
49+
use tokenstream::{self, DelimSpan, TokenTree, TokenStream};
5050
use symbol::{Symbol, keywords};
5151

5252
use std::borrow::Cow;
@@ -285,12 +285,12 @@ enum LastToken {
285285
}
286286

287287
impl TokenCursorFrame {
288-
fn new(sp: DelimSpan, delim: DelimToken, tts: &ThinTokenStream) -> Self {
288+
fn new(sp: DelimSpan, delim: DelimToken, tts: &TokenStream) -> Self {
289289
TokenCursorFrame {
290290
delim: delim,
291291
span: sp,
292292
open_delim: delim == token::NoDelim,
293-
tree_cursor: tts.stream().into_trees(),
293+
tree_cursor: tts.clone().into_trees(),
294294
close_delim: delim == token::NoDelim,
295295
last_token: LastToken::Was(None),
296296
}
@@ -2325,7 +2325,7 @@ impl<'a> Parser<'a> {
23252325
})
23262326
}
23272327

2328-
fn expect_delimited_token_tree(&mut self) -> PResult<'a, (MacDelimiter, ThinTokenStream)> {
2328+
fn expect_delimited_token_tree(&mut self) -> PResult<'a, (MacDelimiter, TokenStream)> {
23292329
let delim = match self.token {
23302330
token::OpenDelim(delim) => delim,
23312331
_ => {
@@ -2345,7 +2345,7 @@ impl<'a> Parser<'a> {
23452345
token::Brace => MacDelimiter::Brace,
23462346
token::NoDelim => self.bug("unexpected no delimiter"),
23472347
};
2348-
Ok((delim, tts.stream().into()))
2348+
Ok((delim, tts.into()))
23492349
}
23502350

23512351
/// At the bottom (top?) of the precedence hierarchy,
@@ -4633,7 +4633,7 @@ impl<'a> Parser<'a> {
46334633
let ident = self.parse_ident()?;
46344634
let tokens = if self.check(&token::OpenDelim(token::Brace)) {
46354635
match self.parse_token_tree() {
4636-
TokenTree::Delimited(_, _, tts) => tts.stream(),
4636+
TokenTree::Delimited(_, _, tts) => tts,
46374637
_ => unreachable!(),
46384638
}
46394639
} else if self.check(&token::OpenDelim(token::Paren)) {

src/libsyntax/print/pprust.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -807,7 +807,7 @@ pub trait PrintState<'a> {
807807
TokenTree::Delimited(_, delim, tts) => {
808808
self.writer().word(token_to_string(&token::OpenDelim(delim)))?;
809809
self.writer().space()?;
810-
self.print_tts(tts.stream())?;
810+
self.print_tts(tts)?;
811811
self.writer().space()?;
812812
self.writer().word(token_to_string(&token::CloseDelim(delim)))
813813
},

src/libsyntax/tokenstream.rs

+3-52
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub enum TokenTree {
4141
/// A single token
4242
Token(Span, token::Token),
4343
/// A delimited sequence of token trees
44-
Delimited(DelimSpan, DelimToken, ThinTokenStream),
44+
Delimited(DelimSpan, DelimToken, TokenStream),
4545
}
4646

4747
impl TokenTree {
@@ -62,8 +62,7 @@ impl TokenTree {
6262
(&TokenTree::Token(_, ref tk), &TokenTree::Token(_, ref tk2)) => tk == tk2,
6363
(&TokenTree::Delimited(_, delim, ref tts),
6464
&TokenTree::Delimited(_, delim2, ref tts2)) => {
65-
delim == delim2 &&
66-
tts.stream().eq_unspanned(&tts2.stream())
65+
delim == delim2 && tts.eq_unspanned(&tts2)
6766
}
6867
(_, _) => false,
6968
}
@@ -81,8 +80,7 @@ impl TokenTree {
8180
}
8281
(&TokenTree::Delimited(_, delim, ref tts),
8382
&TokenTree::Delimited(_, delim2, ref tts2)) => {
84-
delim == delim2 &&
85-
tts.stream().probably_equal_for_proc_macro(&tts2.stream())
83+
delim == delim2 && tts.probably_equal_for_proc_macro(&tts2)
8684
}
8785
(_, _) => false,
8886
}
@@ -492,41 +490,6 @@ impl Cursor {
492490
}
493491
}
494492

495-
/// The `TokenStream` type is large enough to represent a single `TokenTree` without allocation.
496-
/// `ThinTokenStream` is smaller, but needs to allocate to represent a single `TokenTree`.
497-
/// We must use `ThinTokenStream` in `TokenTree::Delimited` to avoid infinite size due to recursion.
498-
#[derive(Debug, Clone)]
499-
pub struct ThinTokenStream(Option<Lrc<Vec<TreeAndJoint>>>);
500-
501-
impl ThinTokenStream {
502-
pub fn stream(&self) -> TokenStream {
503-
self.clone().into()
504-
}
505-
}
506-
507-
impl From<TokenStream> for ThinTokenStream {
508-
fn from(stream: TokenStream) -> ThinTokenStream {
509-
ThinTokenStream(match stream {
510-
TokenStream::Empty => None,
511-
TokenStream::Stream(stream) => Some(stream),
512-
})
513-
}
514-
}
515-
516-
impl From<ThinTokenStream> for TokenStream {
517-
fn from(stream: ThinTokenStream) -> TokenStream {
518-
stream.0.map(TokenStream::Stream).unwrap_or_else(TokenStream::empty)
519-
}
520-
}
521-
522-
impl Eq for ThinTokenStream {}
523-
524-
impl PartialEq<ThinTokenStream> for ThinTokenStream {
525-
fn eq(&self, other: &ThinTokenStream) -> bool {
526-
TokenStream::from(self.clone()) == TokenStream::from(other.clone())
527-
}
528-
}
529-
530493
impl fmt::Display for TokenStream {
531494
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
532495
f.write_str(&pprust::tokens_to_string(self.clone()))
@@ -545,18 +508,6 @@ impl Decodable for TokenStream {
545508
}
546509
}
547510

548-
impl Encodable for ThinTokenStream {
549-
fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), E::Error> {
550-
TokenStream::from(self.clone()).encode(encoder)
551-
}
552-
}
553-
554-
impl Decodable for ThinTokenStream {
555-
fn decode<D: Decoder>(decoder: &mut D) -> Result<ThinTokenStream, D::Error> {
556-
TokenStream::decode(decoder).map(Into::into)
557-
}
558-
}
559-
560511
#[derive(Debug, Copy, Clone, PartialEq, RustcEncodable, RustcDecodable)]
561512
pub struct DelimSpan {
562513
pub open: Span,

src/libsyntax/visit.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ pub fn walk_attribute<'a, V: Visitor<'a>>(visitor: &mut V, attr: &'a Attribute)
832832
pub fn walk_tt<'a, V: Visitor<'a>>(visitor: &mut V, tt: TokenTree) {
833833
match tt {
834834
TokenTree::Token(_, tok) => visitor.visit_token(tok),
835-
TokenTree::Delimited(_, _, tts) => visitor.visit_tts(tts.stream()),
835+
TokenTree::Delimited(_, _, tts) => visitor.visit_tts(tts),
836836
}
837837
}
838838

0 commit comments

Comments
 (0)