Rollup merge of #81608 - Aaron1011:macro-res-parse-err, r=davidtwco
Improve handling of spans around macro result parse errors Fixes #81543 After we expand a macro, we try to parse the resulting tokens as a AST node. This commit makes several improvements to how we handle spans when an error occurs: * Only ovewrite the original `Span` if it's a dummy span. This preserves a more-specific span if one is available. * Use `self.prev_token` instead of `self.token` when emitting an error message after encountering EOF, since an EOF token always has a dummy span * Make `SourceMap::next_point` leave dummy spans unused. A dummy span does not have a logical 'next point', since it's a zero-length span. Re-using the span span preserves its 'dummy-ness' for other checks
This commit is contained in:
commit
255e0764c0
6 changed files with 36 additions and 4 deletions
|
@ -1104,7 +1104,7 @@ impl<'a> Parser<'a> {
|
|||
let (prev_sp, sp) = match (&self.token.kind, self.subparser_name) {
|
||||
// Point at the end of the macro call when reaching end of macro arguments.
|
||||
(token::Eof, Some(_)) => {
|
||||
let sp = self.sess.source_map().next_point(self.token.span);
|
||||
let sp = self.sess.source_map().next_point(self.prev_token.span);
|
||||
(sp, sp)
|
||||
}
|
||||
// We don't want to point at the following span after DUMMY_SP.
|
||||
|
@ -1721,7 +1721,7 @@ impl<'a> Parser<'a> {
|
|||
pub(super) fn expected_expression_found(&self) -> DiagnosticBuilder<'a> {
|
||||
let (span, msg) = match (&self.token.kind, self.subparser_name) {
|
||||
(&token::Eof, Some(origin)) => {
|
||||
let sp = self.sess.source_map().next_point(self.token.span);
|
||||
let sp = self.sess.source_map().next_point(self.prev_token.span);
|
||||
(sp, format!("expected expression, found end of {}", origin))
|
||||
}
|
||||
_ => (
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue