Change look
from a macro to a function.
Using `#[track_caller]` works if the assertion is moved outside of the closure.
This commit is contained in:
parent
336e89bd15
commit
69f6145ad8
1 changed files with 63 additions and 62 deletions
|
@ -1376,12 +1376,13 @@ fn ttdelim_span() {
|
|||
});
|
||||
}
|
||||
|
||||
// Uses a macro rather than a function so that failure messages mention the
|
||||
// correct line in the test function.
|
||||
macro_rules! look {
|
||||
($p:ident, $dist:literal, $kind:expr) => {
|
||||
$p.look_ahead($dist, |tok| assert_eq!($kind, tok.kind));
|
||||
};
|
||||
#[track_caller]
|
||||
fn look(p: &Parser<'_>, dist: usize, kind: rustc_ast::token::TokenKind) {
|
||||
// Do the `assert_eq` outside the closure so that `track_caller` works.
|
||||
// (`#![feature(closure_track_caller)]` + `#[track_caller]` on the closure
|
||||
// doesn't give the line number in the test below if the assertion fails.)
|
||||
let tok = p.look_ahead(dist, |tok| tok.clone());
|
||||
assert_eq!(kind, tok.kind);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -1397,63 +1398,63 @@ fn look_ahead() {
|
|||
let mut p = string_to_parser(&psess, "fn f(x: u32) { x } struct S;".to_string());
|
||||
|
||||
// Current position is the `fn`.
|
||||
look!(p, 0, token::Ident(kw::Fn, raw_no));
|
||||
look!(p, 1, token::Ident(sym_f, raw_no));
|
||||
look!(p, 2, token::OpenDelim(Delimiter::Parenthesis));
|
||||
look!(p, 3, token::Ident(sym_x, raw_no));
|
||||
look!(p, 4, token::Colon);
|
||||
look!(p, 5, token::Ident(sym::u32, raw_no));
|
||||
look!(p, 6, token::CloseDelim(Delimiter::Parenthesis));
|
||||
look!(p, 7, token::OpenDelim(Delimiter::Brace));
|
||||
look!(p, 8, token::Ident(sym_x, raw_no));
|
||||
look!(p, 9, token::CloseDelim(Delimiter::Brace));
|
||||
look!(p, 10, token::Ident(kw::Struct, raw_no));
|
||||
look!(p, 11, token::Ident(sym_S, raw_no));
|
||||
look!(p, 12, token::Semi);
|
||||
look(&p, 0, token::Ident(kw::Fn, raw_no));
|
||||
look(&p, 1, token::Ident(sym_f, raw_no));
|
||||
look(&p, 2, token::OpenDelim(Delimiter::Parenthesis));
|
||||
look(&p, 3, token::Ident(sym_x, raw_no));
|
||||
look(&p, 4, token::Colon);
|
||||
look(&p, 5, token::Ident(sym::u32, raw_no));
|
||||
look(&p, 6, token::CloseDelim(Delimiter::Parenthesis));
|
||||
look(&p, 7, token::OpenDelim(Delimiter::Brace));
|
||||
look(&p, 8, token::Ident(sym_x, raw_no));
|
||||
look(&p, 9, token::CloseDelim(Delimiter::Brace));
|
||||
look(&p, 10, token::Ident(kw::Struct, raw_no));
|
||||
look(&p, 11, token::Ident(sym_S, raw_no));
|
||||
look(&p, 12, token::Semi);
|
||||
// Any lookahead past the end of the token stream returns `Eof`.
|
||||
look!(p, 13, token::Eof);
|
||||
look!(p, 14, token::Eof);
|
||||
look!(p, 15, token::Eof);
|
||||
look!(p, 100, token::Eof);
|
||||
look(&p, 13, token::Eof);
|
||||
look(&p, 14, token::Eof);
|
||||
look(&p, 15, token::Eof);
|
||||
look(&p, 100, token::Eof);
|
||||
|
||||
// Move forward to the first `x`.
|
||||
for _ in 0..3 {
|
||||
p.bump();
|
||||
}
|
||||
look!(p, 0, token::Ident(sym_x, raw_no));
|
||||
look!(p, 1, token::Colon);
|
||||
look!(p, 2, token::Ident(sym::u32, raw_no));
|
||||
look!(p, 3, token::CloseDelim(Delimiter::Parenthesis));
|
||||
look!(p, 4, token::OpenDelim(Delimiter::Brace));
|
||||
look!(p, 5, token::Ident(sym_x, raw_no));
|
||||
look!(p, 6, token::CloseDelim(Delimiter::Brace));
|
||||
look!(p, 7, token::Ident(kw::Struct, raw_no));
|
||||
look!(p, 8, token::Ident(sym_S, raw_no));
|
||||
look!(p, 9, token::Semi);
|
||||
look!(p, 10, token::Eof);
|
||||
look!(p, 11, token::Eof);
|
||||
look!(p, 100, token::Eof);
|
||||
look(&p, 0, token::Ident(sym_x, raw_no));
|
||||
look(&p, 1, token::Colon);
|
||||
look(&p, 2, token::Ident(sym::u32, raw_no));
|
||||
look(&p, 3, token::CloseDelim(Delimiter::Parenthesis));
|
||||
look(&p, 4, token::OpenDelim(Delimiter::Brace));
|
||||
look(&p, 5, token::Ident(sym_x, raw_no));
|
||||
look(&p, 6, token::CloseDelim(Delimiter::Brace));
|
||||
look(&p, 7, token::Ident(kw::Struct, raw_no));
|
||||
look(&p, 8, token::Ident(sym_S, raw_no));
|
||||
look(&p, 9, token::Semi);
|
||||
look(&p, 10, token::Eof);
|
||||
look(&p, 11, token::Eof);
|
||||
look(&p, 100, token::Eof);
|
||||
|
||||
// Move forward to the `;`.
|
||||
for _ in 0..9 {
|
||||
p.bump();
|
||||
}
|
||||
look!(p, 0, token::Semi);
|
||||
look(&p, 0, token::Semi);
|
||||
// Any lookahead past the end of the token stream returns `Eof`.
|
||||
look!(p, 1, token::Eof);
|
||||
look!(p, 100, token::Eof);
|
||||
look(&p, 1, token::Eof);
|
||||
look(&p, 100, token::Eof);
|
||||
|
||||
// Move one past the `;`, i.e. past the end of the token stream.
|
||||
p.bump();
|
||||
look!(p, 0, token::Eof);
|
||||
look!(p, 1, token::Eof);
|
||||
look!(p, 100, token::Eof);
|
||||
look(&p, 0, token::Eof);
|
||||
look(&p, 1, token::Eof);
|
||||
look(&p, 100, token::Eof);
|
||||
|
||||
// Bumping after Eof is idempotent.
|
||||
p.bump();
|
||||
look!(p, 0, token::Eof);
|
||||
look!(p, 1, token::Eof);
|
||||
look!(p, 100, token::Eof);
|
||||
look(&p, 0, token::Eof);
|
||||
look(&p, 1, token::Eof);
|
||||
look(&p, 100, token::Eof);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1476,24 +1477,24 @@ fn look_ahead_non_outermost_stream() {
|
|||
for _ in 0..3 {
|
||||
p.bump();
|
||||
}
|
||||
look!(p, 0, token::Ident(kw::Fn, raw_no));
|
||||
look!(p, 1, token::Ident(sym_f, raw_no));
|
||||
look!(p, 2, token::OpenDelim(Delimiter::Parenthesis));
|
||||
look!(p, 3, token::Ident(sym_x, raw_no));
|
||||
look!(p, 4, token::Colon);
|
||||
look!(p, 5, token::Ident(sym::u32, raw_no));
|
||||
look!(p, 6, token::CloseDelim(Delimiter::Parenthesis));
|
||||
look!(p, 7, token::OpenDelim(Delimiter::Brace));
|
||||
look!(p, 8, token::Ident(sym_x, raw_no));
|
||||
look!(p, 9, token::CloseDelim(Delimiter::Brace));
|
||||
look!(p, 10, token::Ident(kw::Struct, raw_no));
|
||||
look!(p, 11, token::Ident(sym_S, raw_no));
|
||||
look!(p, 12, token::Semi);
|
||||
look!(p, 13, token::CloseDelim(Delimiter::Brace));
|
||||
look(&p, 0, token::Ident(kw::Fn, raw_no));
|
||||
look(&p, 1, token::Ident(sym_f, raw_no));
|
||||
look(&p, 2, token::OpenDelim(Delimiter::Parenthesis));
|
||||
look(&p, 3, token::Ident(sym_x, raw_no));
|
||||
look(&p, 4, token::Colon);
|
||||
look(&p, 5, token::Ident(sym::u32, raw_no));
|
||||
look(&p, 6, token::CloseDelim(Delimiter::Parenthesis));
|
||||
look(&p, 7, token::OpenDelim(Delimiter::Brace));
|
||||
look(&p, 8, token::Ident(sym_x, raw_no));
|
||||
look(&p, 9, token::CloseDelim(Delimiter::Brace));
|
||||
look(&p, 10, token::Ident(kw::Struct, raw_no));
|
||||
look(&p, 11, token::Ident(sym_S, raw_no));
|
||||
look(&p, 12, token::Semi);
|
||||
look(&p, 13, token::CloseDelim(Delimiter::Brace));
|
||||
// Any lookahead past the end of the token stream returns `Eof`.
|
||||
look!(p, 14, token::Eof);
|
||||
look!(p, 15, token::Eof);
|
||||
look!(p, 100, token::Eof);
|
||||
look(&p, 14, token::Eof);
|
||||
look(&p, 15, token::Eof);
|
||||
look(&p, 100, token::Eof);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue