mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-04 19:29:07 +00:00
Fix use closure parsing error message
This commit is contained in:
parent
7c17bf8e82
commit
292aa87049
@ -209,9 +209,7 @@ impl<'a> Parser<'a> {
|
|||||||
let check_pub = def == &Defaultness::Final;
|
let check_pub = def == &Defaultness::Final;
|
||||||
let mut def_ = || mem::replace(def, Defaultness::Final);
|
let mut def_ = || mem::replace(def, Defaultness::Final);
|
||||||
|
|
||||||
let info = if !self.look_ahead(1, |t| [token::OrOr, token::Or].contains(&t.kind))
|
let info = if !self.is_use_closure() && self.eat_keyword_case(exp!(Use), case) {
|
||||||
&& self.eat_keyword_case(exp!(Use), case)
|
|
||||||
{
|
|
||||||
self.parse_use_item()?
|
self.parse_use_item()?
|
||||||
} else if self.check_fn_front_matter(check_pub, case) {
|
} else if self.check_fn_front_matter(check_pub, case) {
|
||||||
// FUNCTION ITEM
|
// FUNCTION ITEM
|
||||||
@ -1279,6 +1277,21 @@ impl<'a> Parser<'a> {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_use_closure(&self) -> bool {
|
||||||
|
if self.token.is_keyword(kw::Use) {
|
||||||
|
// Check if this could be a closure.
|
||||||
|
self.look_ahead(1, |token| {
|
||||||
|
// Move or Async here would be an error but still we're parsing a closure
|
||||||
|
let dist =
|
||||||
|
if token.is_keyword(kw::Move) || token.is_keyword(kw::Async) { 2 } else { 1 };
|
||||||
|
|
||||||
|
self.look_ahead(dist, |token| matches!(token.kind, token::Or | token::OrOr))
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn is_unsafe_foreign_mod(&self) -> bool {
|
fn is_unsafe_foreign_mod(&self) -> bool {
|
||||||
self.token.is_keyword(kw::Unsafe)
|
self.token.is_keyword(kw::Unsafe)
|
||||||
&& self.is_keyword_ahead(1, &[kw::Extern])
|
&& self.is_keyword_ahead(1, &[kw::Extern])
|
||||||
|
@ -14,9 +14,7 @@ fn parse2() {
|
|||||||
|
|
||||||
fn parse3() {
|
fn parse3() {
|
||||||
use move || {
|
use move || {
|
||||||
//~^ ERROR expected identifier, found keyword `move`
|
//~^ ERROR expected one of `async`, `|`, or `||`, found keyword `move`
|
||||||
//~| ERROR expected one of `::`, `;`, or `as`, found `||`
|
|
||||||
// FIXME ideally we should error like in the previous example
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,17 +18,11 @@ error: expected one of `async`, `|`, or `||`, found keyword `use`
|
|||||||
LL | move use || {
|
LL | move use || {
|
||||||
| ^^^ expected one of `async`, `|`, or `||`
|
| ^^^ expected one of `async`, `|`, or `||`
|
||||||
|
|
||||||
error: expected identifier, found keyword `move`
|
error: expected one of `async`, `|`, or `||`, found keyword `move`
|
||||||
--> $DIR/parse.rs:16:9
|
--> $DIR/parse.rs:16:9
|
||||||
|
|
|
|
||||||
LL | use move || {
|
LL | use move || {
|
||||||
| ^^^^ expected identifier, found keyword
|
| ^^^^ expected one of `async`, `|`, or `||`
|
||||||
|
|
||||||
error: expected one of `::`, `;`, or `as`, found `||`
|
error: aborting due to 3 previous errors
|
||||||
--> $DIR/parse.rs:16:14
|
|
||||||
|
|
|
||||||
LL | use move || {
|
|
||||||
| ^^ expected one of `::`, `;`, or `as`
|
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user