Skip to content

Commit ed2fd28

Browse files
committed
parser: Set previous and unnormalized tokens in couple more places
1 parent d33b356 commit ed2fd28

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

src/librustc_parse/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ fn maybe_source_file_to_parser(
172172
parser.unclosed_delims = unclosed_delims;
173173
if parser.token == token::Eof && parser.token.span.is_dummy() {
174174
parser.token.span = Span::new(end_pos, end_pos, parser.token.span.ctxt());
175+
assert!(parser.unnormalized_token.is_none());
175176
}
176177

177178
Ok(parser)

src/librustc_parse/parser/item.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,8 +1400,9 @@ impl<'a> Parser<'a> {
14001400
}
14011401

14021402
fn report_invalid_macro_expansion_item(&self, args: &MacArgs) {
1403+
let span = args.span().expect("undelimited macro call");
14031404
let mut err = self.struct_span_err(
1404-
self.prev_span,
1405+
span,
14051406
"macros that expand to items must be delimited with braces or followed by a semicolon",
14061407
);
14071408
if self.unclosed_delims.is_empty() {
@@ -1416,14 +1417,14 @@ impl<'a> Parser<'a> {
14161417
);
14171418
} else {
14181419
err.span_suggestion(
1419-
self.prev_span,
1420+
span,
14201421
"change the delimiters to curly braces",
14211422
" { /* items */ }".to_string(),
14221423
Applicability::HasPlaceholders,
14231424
);
14241425
}
14251426
err.span_suggestion(
1426-
self.prev_span.shrink_to_hi(),
1427+
span.shrink_to_hi(),
14271428
"add a semicolon",
14281429
';'.to_string(),
14291430
Applicability::MaybeIncorrect,

src/librustc_parse/parser/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ pub struct Parser<'a> {
9595
/// The current non-normalized token if it's different from `token`.
9696
/// Preferable use is through the `unnormalized_token()` getter.
9797
/// Use span from this token if you need to concatenate it with some neighbouring spans.
98-
unnormalized_token: Option<Token>,
98+
pub unnormalized_token: Option<Token>,
9999
/// The previous normalized token.
100100
/// Use span from this token if you need an isolated span.
101101
prev_token: Token,
@@ -1096,15 +1096,15 @@ impl<'a> Parser<'a> {
10961096
&mut self.token_cursor.frame,
10971097
self.token_cursor.stack.pop().unwrap(),
10981098
);
1099-
self.token.span = frame.span.entire();
1099+
self.token = Token::new(TokenKind::CloseDelim(frame.delim), frame.span.close);
1100+
self.unnormalized_token = None;
11001101
self.bump();
11011102
TokenTree::Delimited(frame.span, frame.delim, frame.tree_cursor.stream.into())
11021103
}
11031104
token::CloseDelim(_) | token::Eof => unreachable!(),
11041105
_ => {
1105-
let token = self.token.clone();
11061106
self.bump();
1107-
TokenTree::Token(token)
1107+
TokenTree::Token(self.prev_token.clone())
11081108
}
11091109
}
11101110
}

0 commit comments

Comments
 (0)