Auto merge of #80789 - Aaron1011:fix/stmt-empty, r=petrochenkov
Synthesize a `TokenStream` for `StmtKind::Empty` Fixes #80760
This commit is contained in:
commit
080ee6f5d7
3 changed files with 50 additions and 1 deletions
|
@ -257,7 +257,16 @@ pub fn nt_to_tokenstream(
|
||||||
let tokens = match *nt {
|
let tokens = match *nt {
|
||||||
Nonterminal::NtItem(ref item) => prepend_attrs(sess, &item.attrs, nt, item.tokens.as_ref()),
|
Nonterminal::NtItem(ref item) => prepend_attrs(sess, &item.attrs, nt, item.tokens.as_ref()),
|
||||||
Nonterminal::NtBlock(ref block) => convert_tokens(block.tokens.as_ref()),
|
Nonterminal::NtBlock(ref block) => convert_tokens(block.tokens.as_ref()),
|
||||||
Nonterminal::NtStmt(ref stmt) => prepend_attrs(sess, stmt.attrs(), nt, stmt.tokens()),
|
Nonterminal::NtStmt(ref stmt) => {
|
||||||
|
let do_prepend = |tokens| prepend_attrs(sess, stmt.attrs(), nt, tokens);
|
||||||
|
if let ast::StmtKind::Empty = stmt.kind {
|
||||||
|
let tokens: TokenStream =
|
||||||
|
tokenstream::TokenTree::token(token::Semi, stmt.span).into();
|
||||||
|
do_prepend(Some(&LazyTokenStream::new(tokens)))
|
||||||
|
} else {
|
||||||
|
do_prepend(stmt.tokens())
|
||||||
|
}
|
||||||
|
}
|
||||||
Nonterminal::NtPat(ref pat) => convert_tokens(pat.tokens.as_ref()),
|
Nonterminal::NtPat(ref pat) => convert_tokens(pat.tokens.as_ref()),
|
||||||
Nonterminal::NtTy(ref ty) => convert_tokens(ty.tokens.as_ref()),
|
Nonterminal::NtTy(ref ty) => convert_tokens(ty.tokens.as_ref()),
|
||||||
Nonterminal::NtIdent(ident, is_raw) => {
|
Nonterminal::NtIdent(ident, is_raw) => {
|
||||||
|
|
26
src/test/ui/proc-macro/issue-80760-empty-stmt.rs
Normal file
26
src/test/ui/proc-macro/issue-80760-empty-stmt.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
// check-pass
|
||||||
|
// aux-build:test-macros.rs
|
||||||
|
// compile-flags: -Z span-debug
|
||||||
|
|
||||||
|
#![no_std] // Don't load unnecessary hygiene information from std
|
||||||
|
extern crate std;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate test_macros;
|
||||||
|
|
||||||
|
macro_rules! empty_stmt {
|
||||||
|
($s:stmt) => {
|
||||||
|
print_bang!($s);
|
||||||
|
|
||||||
|
// Currently, all attributes are ignored
|
||||||
|
// on an empty statement
|
||||||
|
#[print_attr]
|
||||||
|
#[rustc_dummy(first)]
|
||||||
|
#[rustc_dummy(second)]
|
||||||
|
$s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
empty_stmt!(;);
|
||||||
|
}
|
14
src/test/ui/proc-macro/issue-80760-empty-stmt.stdout
Normal file
14
src/test/ui/proc-macro/issue-80760-empty-stmt.stdout
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
PRINT-BANG INPUT (DISPLAY): ;
|
||||||
|
PRINT-BANG INPUT (DEBUG): TokenStream [
|
||||||
|
Group {
|
||||||
|
delimiter: None,
|
||||||
|
stream: TokenStream [
|
||||||
|
Punct {
|
||||||
|
ch: ';',
|
||||||
|
spacing: Alone,
|
||||||
|
span: $DIR/issue-80760-empty-stmt.rs:25:17: 25:18 (#0),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
span: $DIR/issue-80760-empty-stmt.rs:13:21: 13:23 (#4),
|
||||||
|
},
|
||||||
|
]
|
Loading…
Add table
Add a link
Reference in a new issue