diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-05-30 18:19:48 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-05-30 18:19:48 -0700 |
| commit | ad0d3b5d4064cfd9013c498299a53b3f1586553e (patch) | |
| tree | 084ac6c5867da5adda623ad484e8765be340f1fb /src/libsyntax/parse/parser.rs | |
| parent | 1ee45da2b9789881b8c79d6a1af8a2c9fd5364f2 (diff) | |
| download | rust-ad0d3b5d4064cfd9013c498299a53b3f1586553e.tar.gz rust-ad0d3b5d4064cfd9013c498299a53b3f1586553e.zip | |
Move code from `parser` to `diagnostics`
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 35 |
1 files changed, 2 insertions, 33 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 3bb34d0402d..659058ffcf3 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -47,11 +47,10 @@ use crate::parse::PResult; use crate::ThinVec; use crate::tokenstream::{self, DelimSpan, TokenTree, TokenStream, TreeAndJoint}; use crate::symbol::{kw, sym, Symbol}; -use crate::parse::diagnostics::Error; +use crate::parse::diagnostics::{Error, dummy_arg}; use errors::{Applicability, DiagnosticBuilder, DiagnosticId, FatalError}; use rustc_target::spec::abi::{self, Abi}; -use rustc_data_structures::fx::FxHashSet; use syntax_pos::{Span, BytePos, DUMMY_SP, FileName, hygiene::CompilerDesugaringKind}; use log::debug; @@ -452,21 +451,6 @@ impl From<P<Expr>> for LhsExpr { } } -/// Creates a placeholder argument. -fn dummy_arg(ident: Ident) -> Arg { - let pat = P(Pat { - id: ast::DUMMY_NODE_ID, - node: PatKind::Ident(BindingMode::ByValue(Mutability::Immutable), ident, None), - span: ident.span, - }); - let ty = Ty { - node: TyKind::Err, - span: ident.span, - id: ast::DUMMY_NODE_ID - }; - Arg { ty: P(ty), pat: pat, id: ast::DUMMY_NODE_ID, source: ast::ArgSource::Normal } -} - #[derive(Copy, Clone, Debug)] crate enum TokenExpectType { Expect, @@ -5617,22 +5601,7 @@ impl<'a> Parser<'a> { self.expect(&token::CloseDelim(token::Paren))?; } // Replace duplicated recovered arguments with `_` pattern to avoid unecessary errors. - let mut seen_inputs = FxHashSet::default(); - for input in fn_inputs.iter_mut() { - let opt_ident = if let (PatKind::Ident(_, ident, _), TyKind::Err) = ( - &input.pat.node, &input.ty, - ) { - Some(*ident) - } else { - None - }; - if let Some(ident) = opt_ident { - if seen_inputs.contains(&ident) { - input.pat.node = PatKind::Wild; - } - seen_inputs.insert(ident); - } - } + self.deduplicate_recovered_arg_names(&mut fn_inputs); Ok(P(FnDecl { inputs: fn_inputs, |
