diff options
| author | bors <bors@rust-lang.org> | 2019-06-01 00:57:37 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-06-01 00:57:37 +0000 |
| commit | 84f729d0d4dade321210b78f56bedd88025eeff6 (patch) | |
| tree | deff171b0bc9505fde5f9c29debd548643c8e28d /src/libsyntax/parse/parser.rs | |
| parent | 041bec87c022128556640b7091f479f3040c3c37 (diff) | |
| parent | e32386d70ed2e5ba103b490c2aac56385bc88405 (diff) | |
| download | rust-84f729d0d4dade321210b78f56bedd88025eeff6.tar.gz rust-84f729d0d4dade321210b78f56bedd88025eeff6.zip | |
Auto merge of #61394 - pietroalbini:rollup-lzugnb4, r=pietroalbini
Rollup of 11 pull requests Successful merges: - #60897 (error: remove StringError from Debug output) - #61304 (Speed up Azure CI installing Windows dependencies) - #61319 (Swap order of `unsafe async fn` to `async unsafe fn`) - #61342 (Set ellipsis_inclusive_range_patterns lint to warn) - #61344 (Add regression test for const generics ICE) - #61359 (Fix links in Deref documentation) - #61363 (Stabilize iter_nth_back feature) - #61369 (Fixed lifetime misspelling) - #61372 (Migrate some books to mdbook version 0.2) - #61374 (Explicitly suggest 'type_ascription' feature) - #61382 (Fixed a typo in core::convert::AsMut) Failed merges: r? @ghost
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 71 |
1 files changed, 34 insertions, 37 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 746e9cad496..92c27f883d1 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -7205,44 +7205,41 @@ impl<'a> Parser<'a> { return Ok(Some(item)); } - // `unsafe async fn` or `async fn` - if ( - self.check_keyword(kw::Unsafe) && - self.is_keyword_ahead(1, &[kw::Async]) - ) || ( - self.check_keyword(kw::Async) && - self.is_keyword_ahead(1, &[kw::Fn]) - ) - { - // ASYNC FUNCTION ITEM - let unsafety = self.parse_unsafety(); - self.expect_keyword(kw::Async)?; - let async_span = self.prev_span; - self.expect_keyword(kw::Fn)?; - let fn_span = self.prev_span; - let (ident, item_, extra_attrs) = - self.parse_item_fn(unsafety, - respan(async_span, IsAsync::Async { - closure_id: ast::DUMMY_NODE_ID, - return_impl_trait_id: ast::DUMMY_NODE_ID, - arguments: Vec::new(), - }), - respan(fn_span, Constness::NotConst), - Abi::Rust)?; - let prev_span = self.prev_span; - let item = self.mk_item(lo.to(prev_span), - ident, - item_, - visibility, - maybe_append(attrs, extra_attrs)); - if self.span.rust_2015() { - self.diagnostic().struct_span_err_with_code( - async_span, - "`async fn` is not permitted in the 2015 edition", - DiagnosticId::Error("E0670".into()) - ).emit(); + // Parse `async unsafe? fn`. + if self.check_keyword(kw::Async) { + let async_span = self.span; + if self.is_keyword_ahead(1, &[kw::Fn]) + || self.is_keyword_ahead(2, &[kw::Fn]) + { + // ASYNC FUNCTION ITEM + self.bump(); // `async` + let unsafety = self.parse_unsafety(); // `unsafe`? + self.expect_keyword(kw::Fn)?; // `fn` + let fn_span = self.prev_span; + let (ident, item_, extra_attrs) = + self.parse_item_fn(unsafety, + respan(async_span, IsAsync::Async { + closure_id: ast::DUMMY_NODE_ID, + return_impl_trait_id: ast::DUMMY_NODE_ID, + arguments: Vec::new(), + }), + respan(fn_span, Constness::NotConst), + Abi::Rust)?; + let prev_span = self.prev_span; + let item = self.mk_item(lo.to(prev_span), + ident, + item_, + visibility, + maybe_append(attrs, extra_attrs)); + if self.span.rust_2015() { + self.diagnostic().struct_span_err_with_code( + async_span, + "`async fn` is not permitted in the 2015 edition", + DiagnosticId::Error("E0670".into()) + ).emit(); + } + return Ok(Some(item)); } - return Ok(Some(item)); } if self.check_keyword(kw::Unsafe) && self.is_keyword_ahead(1, &[kw::Trait, kw::Auto]) |
