Skip to content

Commit 06fbb0b

Browse files
committed
parser: Remove Options from unnormalized tokens
They are always set synchronously with normalized tokens now
1 parent ed2fd28 commit 06fbb0b

File tree

4 files changed

+26
-43
lines changed

4 files changed

+26
-43
lines changed

src/librustc_parse/lib.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rustc_errors::{Diagnostic, FatalError, Level, PResult};
99
use rustc_session::parse::ParseSess;
1010
use rustc_span::{FileName, SourceFile, Span};
1111
use syntax::ast;
12-
use syntax::token::{self, Nonterminal};
12+
use syntax::token::{self, Nonterminal, Token};
1313
use syntax::tokenstream::{self, TokenStream, TokenTree};
1414

1515
use std::path::{Path, PathBuf};
@@ -170,9 +170,9 @@ fn maybe_source_file_to_parser(
170170
let (stream, unclosed_delims) = maybe_file_to_stream(sess, source_file, None)?;
171171
let mut parser = stream_to_parser(sess, stream, None);
172172
parser.unclosed_delims = unclosed_delims;
173-
if parser.token == token::Eof && parser.token.span.is_dummy() {
174-
parser.token.span = Span::new(end_pos, end_pos, parser.token.span.ctxt());
175-
assert!(parser.unnormalized_token.is_none());
173+
if parser.token == token::Eof {
174+
let span = Span::new(end_pos, end_pos, parser.token.span.ctxt());
175+
parser.set_token(Token::new(token::Eof, span));
176176
}
177177

178178
Ok(parser)

src/librustc_parse/parser/expr.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ impl<'a> Parser<'a> {
166166
while let Some(op) = self.check_assoc_op() {
167167
// Adjust the span for interpolated LHS to point to the `$lhs` token
168168
// and not to what it refers to.
169-
let lhs_span = match self.unnormalized_prev_token().kind {
169+
let lhs_span = match self.unnormalized_prev_token.kind {
170170
TokenKind::Interpolated(..) => self.prev_span,
171171
_ => lhs.span,
172172
};
@@ -527,7 +527,7 @@ impl<'a> Parser<'a> {
527527
) -> PResult<'a, (Span, P<Expr>)> {
528528
expr.map(|e| {
529529
(
530-
match self.unnormalized_prev_token().kind {
530+
match self.unnormalized_prev_token.kind {
531531
TokenKind::Interpolated(..) => self.prev_span,
532532
_ => e.span,
533533
},

src/librustc_parse/parser/mod.rs

+19-36
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,16 @@ pub struct Parser<'a> {
9393
/// Use span from this token if you need an isolated span.
9494
pub token: Token,
9595
/// The current non-normalized token if it's different from `token`.
96-
/// Preferable use is through the `unnormalized_token()` getter.
9796
/// Use span from this token if you need to concatenate it with some neighbouring spans.
98-
pub unnormalized_token: Option<Token>,
97+
unnormalized_token: Token,
9998
/// The previous normalized token.
10099
/// Use span from this token if you need an isolated span.
101100
prev_token: Token,
102101
/// The previous non-normalized token if it's different from `prev_token`.
103-
/// Preferable use is through the `unnormalized_prev_token()` getter.
104102
/// Use span from this token if you need to concatenate it with some neighbouring spans.
105-
unnormalized_prev_token: Option<Token>,
106-
/// Equivalent to `unnormalized_prev_token().span`.
107-
/// FIXME: Remove in favor of `(unnormalized_)prev_token().span`.
103+
unnormalized_prev_token: Token,
104+
/// Equivalent to `unnormalized_prev_token.span`.
105+
/// FIXME: Remove in favor of `(unnormalized_)prev_token.span`.
108106
pub prev_span: Span,
109107
restrictions: Restrictions,
110108
/// Used to determine the path to externally loaded source files.
@@ -378,9 +376,9 @@ impl<'a> Parser<'a> {
378376
let mut parser = Parser {
379377
sess,
380378
token: Token::dummy(),
381-
unnormalized_token: None,
379+
unnormalized_token: Token::dummy(),
382380
prev_token: Token::dummy(),
383-
unnormalized_prev_token: None,
381+
unnormalized_prev_token: Token::dummy(),
384382
prev_span: DUMMY_SP,
385383
restrictions: Restrictions::empty(),
386384
recurse_into_file_modules,
@@ -422,14 +420,6 @@ impl<'a> Parser<'a> {
422420
parser
423421
}
424422

425-
fn unnormalized_token(&self) -> &Token {
426-
self.unnormalized_token.as_ref().unwrap_or(&self.token)
427-
}
428-
429-
fn unnormalized_prev_token(&self) -> &Token {
430-
self.unnormalized_prev_token.as_ref().unwrap_or(&self.prev_token)
431-
}
432-
433423
fn next_tok(&mut self, fallback_span: Span) -> Token {
434424
let mut next = if self.desugar_doc_comments {
435425
self.token_cursor.next_desugared()
@@ -899,18 +889,17 @@ impl<'a> Parser<'a> {
899889
// Interpolated identifier (`$i: ident`) and lifetime (`$l: lifetime`)
900890
// tokens are replaced with usual identifier and lifetime tokens,
901891
// so the former are never encountered during normal parsing.
902-
fn normalize_token(token: &Token) -> Option<Token> {
903-
match &token.kind {
892+
crate fn set_token(&mut self, token: Token) {
893+
self.unnormalized_token = token;
894+
self.token = match &self.unnormalized_token.kind {
904895
token::Interpolated(nt) => match **nt {
905896
token::NtIdent(ident, is_raw) => {
906-
Some(Token::new(token::Ident(ident.name, is_raw), ident.span))
897+
Token::new(token::Ident(ident.name, is_raw), ident.span)
907898
}
908-
token::NtLifetime(ident) => {
909-
Some(Token::new(token::Lifetime(ident.name), ident.span))
910-
}
911-
_ => None,
899+
token::NtLifetime(ident) => Token::new(token::Lifetime(ident.name), ident.span),
900+
_ => self.unnormalized_token.clone(),
912901
},
913-
_ => None,
902+
_ => self.unnormalized_token.clone(),
914903
}
915904
}
916905

@@ -925,13 +914,11 @@ impl<'a> Parser<'a> {
925914
// Update the current and previous tokens.
926915
self.prev_token = self.token.take();
927916
self.unnormalized_prev_token = self.unnormalized_token.take();
928-
self.token = self.next_tok(self.unnormalized_prev_token().span);
929-
if let Some(normalized_token) = Self::normalize_token(&self.token) {
930-
self.unnormalized_token = Some(mem::replace(&mut self.token, normalized_token));
931-
}
917+
let next_token = self.next_tok(self.unnormalized_prev_token.span);
918+
self.set_token(next_token);
932919

933920
// Update fields derived from the previous token.
934-
self.prev_span = self.unnormalized_prev_token().span;
921+
self.prev_span = self.unnormalized_prev_token.span;
935922

936923
self.expected_tokens.clear();
937924
}
@@ -945,13 +932,10 @@ impl<'a> Parser<'a> {
945932
// Update the current and previous tokens.
946933
self.prev_token = self.token.take();
947934
self.unnormalized_prev_token = self.unnormalized_token.take();
948-
self.token = Token::new(next, span);
949-
if let Some(normalized_token) = Self::normalize_token(&self.token) {
950-
self.unnormalized_token = Some(mem::replace(&mut self.token, normalized_token));
951-
}
935+
self.set_token(Token::new(next, span));
952936

953937
// Update fields derived from the previous token.
954-
self.prev_span = self.unnormalized_prev_token().span.with_hi(span.lo());
938+
self.prev_span = self.unnormalized_prev_token.span.with_hi(span.lo());
955939

956940
self.expected_tokens.clear();
957941
}
@@ -1096,8 +1080,7 @@ impl<'a> Parser<'a> {
10961080
&mut self.token_cursor.frame,
10971081
self.token_cursor.stack.pop().unwrap(),
10981082
);
1099-
self.token = Token::new(TokenKind::CloseDelim(frame.delim), frame.span.close);
1100-
self.unnormalized_token = None;
1083+
self.set_token(Token::new(TokenKind::CloseDelim(frame.delim), frame.span.close));
11011084
self.bump();
11021085
TokenTree::Delimited(frame.span, frame.delim, frame.tree_cursor.stream.into())
11031086
}

src/librustc_parse/parser/path.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ impl<'a> Parser<'a> {
134134
path
135135
});
136136

137-
let lo = self.unnormalized_token().span;
137+
let lo = self.unnormalized_token.span;
138138
let mut segments = Vec::new();
139139
let mod_sep_ctxt = self.token.span.ctxt();
140140
if self.eat(&token::ModSep) {

0 commit comments

Comments
 (0)