diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-01-30 05:31:04 +0100 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-02-13 10:39:24 +0100 |
| commit | c30f068dc8b2ef58678b9846ba834dd6dea3fe44 (patch) | |
| tree | 82e59f521573df949dda750e7f1aa31588205b7d /src/librustc_parse/parser | |
| parent | e839b2ec849246ec5efe5069c8d874dbef289462 (diff) | |
| download | rust-c30f068dc8b2ef58678b9846ba834dd6dea3fe44.tar.gz rust-c30f068dc8b2ef58678b9846ba834dd6dea3fe44.zip | |
IsAsync -> enum Async { Yes { span: Span, .. }, No }
use new span for better diagnostics.
Diffstat (limited to 'src/librustc_parse/parser')
| -rw-r--r-- | src/librustc_parse/parser/expr.rs | 4 | ||||
| -rw-r--r-- | src/librustc_parse/parser/item.rs | 44 | ||||
| -rw-r--r-- | src/librustc_parse/parser/mod.rs | 9 |
3 files changed, 16 insertions, 41 deletions
diff --git a/src/librustc_parse/parser/expr.rs b/src/librustc_parse/parser/expr.rs index 77748d16653..5a4225ece65 100644 --- a/src/librustc_parse/parser/expr.rs +++ b/src/librustc_parse/parser/expr.rs @@ -13,7 +13,7 @@ use syntax::ast::{self, AttrStyle, AttrVec, CaptureBy, Field, Ident, Lit, DUMMY_ use syntax::ast::{ AnonConst, BinOp, BinOpKind, FnDecl, FunctionRetTy, Mac, Param, Ty, TyKind, UnOp, }; -use syntax::ast::{Arm, BlockCheckMode, Expr, ExprKind, IsAsync, Label, Movability, RangeLimits}; +use syntax::ast::{Arm, Async, BlockCheckMode, Expr, ExprKind, Label, Movability, RangeLimits}; use syntax::ptr::P; use syntax::token::{self, Token, TokenKind}; use syntax::util::classify; @@ -1348,7 +1348,7 @@ impl<'a> Parser<'a> { if self.eat_keyword(kw::Static) { Movability::Static } else { Movability::Movable }; let asyncness = - if self.token.span.rust_2018() { self.parse_asyncness() } else { IsAsync::NotAsync }; + if self.token.span.rust_2018() { self.parse_asyncness() } else { Async::No }; if asyncness.is_async() { // Feature-gate `async ||` closures. self.sess.gated_spans.gate(sym::async_closure, self.prev_span); diff --git a/src/librustc_parse/parser/item.rs b/src/librustc_parse/parser/item.rs index a66a85b2b83..aa43c15e286 100644 --- a/src/librustc_parse/parser/item.rs +++ b/src/librustc_parse/parser/item.rs @@ -6,13 +6,13 @@ use crate::maybe_whole; use rustc_ast_pretty::pprust; use rustc_errors::{struct_span_err, Applicability, DiagnosticBuilder, PResult, StashKey}; -use rustc_span::source_map::{self, respan, Span}; +use rustc_span::source_map::{self, Span}; use rustc_span::symbol::{kw, sym, Symbol}; use rustc_span::BytePos; use syntax::ast::{self, AttrKind, AttrStyle, AttrVec, Attribute, Ident, DUMMY_NODE_ID}; use syntax::ast::{AssocItem, AssocItemKind, Item, ItemKind, UseTree, UseTreeKind}; +use syntax::ast::{Async, Const, Defaultness, Extern, IsAuto, PathSegment, StrLit, Unsafe}; use syntax::ast::{BindingMode, Block, FnDecl, FnSig, Mac, MacArgs, MacDelimiter, Param, SelfKind}; -use syntax::ast::{Const, Defaultness, Extern, IsAsync, IsAuto, PathSegment, StrLit, Unsafe}; use syntax::ast::{EnumDef, Generics, StructField, TraitRef, Ty, TyKind, Variant, VariantData}; use syntax::ast::{FnHeader, ForeignItem, ForeignItemKind, Mutability, Visibility, VisibilityKind}; use syntax::ptr::P; @@ -105,10 +105,9 @@ impl<'a> Parser<'a> { if self.eat_keyword(kw::Fn) { // EXTERN FUNCTION ITEM - let fn_span = self.prev_span; let header = FnHeader { unsafety: Unsafe::No, - asyncness: respan(fn_span, IsAsync::NotAsync), + asyncness: Async::No, constness: Const::No, ext: Extern::from_abi(abi), }; @@ -140,12 +139,7 @@ impl<'a> Parser<'a> { let ext = self.parse_extern()?; self.expect_keyword(kw::Fn)?; - let header = FnHeader { - unsafety, - asyncness: respan(const_span, IsAsync::NotAsync), - constness, - ext, - }; + let header = FnHeader { unsafety, asyncness: Async::No, constness, ext }; return self.parse_item_fn(lo, vis, attrs, header); } @@ -172,16 +166,9 @@ impl<'a> Parser<'a> { let async_span = self.token.span; if self.is_keyword_ahead(1, &[kw::Fn]) || self.is_keyword_ahead(2, &[kw::Fn]) { // ASYNC FUNCTION ITEM - self.bump(); // `async` + let asyncness = self.parse_asyncness(); // `async` let unsafety = self.parse_unsafety(); // `unsafe`? self.expect_keyword(kw::Fn)?; // `fn` - let asyncness = respan( - async_span, - IsAsync::Async { - closure_id: DUMMY_NODE_ID, - return_impl_trait_id: DUMMY_NODE_ID, - }, - ); self.ban_async_in_2015(async_span); let header = FnHeader { unsafety, asyncness, constness: Const::No, ext: Extern::None }; @@ -211,13 +198,7 @@ impl<'a> Parser<'a> { if self.check_keyword(kw::Fn) { // FUNCTION ITEM self.bump(); - let fn_span = self.prev_span; - let header = FnHeader { - unsafety: Unsafe::No, - asyncness: respan(fn_span, IsAsync::NotAsync), - constness: Const::No, - ext: Extern::None, - }; + let header = FnHeader::default(); return self.parse_item_fn(lo, vis, attrs, header); } @@ -230,13 +211,7 @@ impl<'a> Parser<'a> { self.check(&token::OpenDelim(token::Brace)); let ext = self.parse_extern()?; self.expect_keyword(kw::Fn)?; - let fn_span = self.prev_span; - let header = FnHeader { - unsafety, - asyncness: respan(fn_span, IsAsync::NotAsync), - constness: Const::No, - ext, - }; + let header = FnHeader { unsafety, asyncness: Async::No, constness: Const::No, ext }; return self.parse_item_fn(lo, vis, attrs, header); } @@ -1788,10 +1763,9 @@ impl<'a> Parser<'a> { fn parse_fn_front_matter(&mut self) -> PResult<'a, FnHeader> { let constness = self.parse_constness(); let asyncness = self.parse_asyncness(); - if let IsAsync::Async { .. } = asyncness { - self.ban_async_in_2015(self.prev_span); + if let Async::Yes { span, .. } = asyncness { + self.ban_async_in_2015(span); } - let asyncness = respan(self.prev_span, asyncness); let unsafety = self.parse_unsafety(); let (constness, unsafety, ext) = if let Const::Yes(_) = constness { (constness, unsafety, Extern::None) diff --git a/src/librustc_parse/parser/mod.rs b/src/librustc_parse/parser/mod.rs index bccf5968118..2f2f2f8f176 100644 --- a/src/librustc_parse/parser/mod.rs +++ b/src/librustc_parse/parser/mod.rs @@ -24,7 +24,7 @@ use rustc_span::symbol::{kw, sym, Symbol}; use rustc_span::{FileName, Span, DUMMY_SP}; use syntax::ast::DUMMY_NODE_ID; use syntax::ast::{self, AttrStyle, AttrVec, Const, CrateSugar, Extern, Ident, Unsafe}; -use syntax::ast::{IsAsync, MacArgs, MacDelimiter, Mutability, StrLit, Visibility, VisibilityKind}; +use syntax::ast::{Async, MacArgs, MacDelimiter, Mutability, StrLit, Visibility, VisibilityKind}; use syntax::ptr::P; use syntax::token::{self, DelimToken, Token, TokenKind}; use syntax::tokenstream::{self, DelimSpan, TokenStream, TokenTree, TreeAndJoint}; @@ -954,11 +954,12 @@ impl<'a> Parser<'a> { } /// Parses asyncness: `async` or nothing. - fn parse_asyncness(&mut self) -> IsAsync { + fn parse_asyncness(&mut self) -> Async { if self.eat_keyword(kw::Async) { - IsAsync::Async { closure_id: DUMMY_NODE_ID, return_impl_trait_id: DUMMY_NODE_ID } + let span = self.prev_span; + Async::Yes { span, closure_id: DUMMY_NODE_ID, return_impl_trait_id: DUMMY_NODE_ID } } else { - IsAsync::NotAsync + Async::No } } |
