9d31f86f0d
This commit does the following. - Renames `collect_tokens_trailing_token` as `collect_tokens`, because (a) it's annoying long, and (b) the `_trailing_token` bit is less accurate now that its types have changed. - In `collect_tokens`, adds a `Option<CollectPos>` argument and a `UsePreAttrPos` in the return type of `f`. These are used in `parse_expr_force_collect` (for vanilla expressions) and in `parse_stmt_without_recovery` (for two different cases of expression statements). Together these ensure are enough to fix all the problems with token collection and assoc expressions. The changes to the `stringify.rs` test demonstrate some of these. - Adds a new test. The code in this test was causing an assertion failure prior to this commit, due to an invalid `NodeRange`. The extra complexity is annoying, but necessary to fix the existing problems.
43 lines
748 B
Rust
43 lines
748 B
Rust
//@ check-pass
|
|
// This test triggered an assertion failure in token collection due to
|
|
// mishandling of attributes on associative expressions.
|
|
|
|
#![feature(cfg_eval)]
|
|
#![feature(rustc_attrs)]
|
|
#![feature(stmt_expr_attributes)]
|
|
#![allow(internal_features)]
|
|
|
|
fn main() {}
|
|
|
|
#[cfg_eval]
|
|
struct Foo1(
|
|
[ bool; {
|
|
let _x = 30;
|
|
#[cfg_attr(unix, rustc_dummy(aa))] 1
|
|
} ]
|
|
);
|
|
|
|
#[cfg_eval]
|
|
struct Foo12(
|
|
[ bool; {
|
|
let _x = 30;
|
|
#[cfg_attr(unix, rustc_dummy(bb))] 1 + 2
|
|
} ]
|
|
);
|
|
|
|
#[cfg_eval]
|
|
struct Foox(
|
|
[ bool; {
|
|
let _x = 30;
|
|
#[cfg_attr(unix, rustc_dummy(cc))] _x
|
|
} ]
|
|
);
|
|
|
|
#[cfg_eval]
|
|
struct Foox2(
|
|
[ bool; {
|
|
let _x = 30;
|
|
#[cfg_attr(unix, rustc_dummy(dd))] _x + 2
|
|
} ]
|
|
);
|