diff options
| author | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-06-19 10:09:00 +0200 |
|---|---|---|
| committer | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-06-30 11:45:11 +0200 |
| commit | 6641233b34fd910864131febb22f71777a7add6a (patch) | |
| tree | 82961eaa88c62e04e5dbc7cbf429e051e821e74a | |
| parent | 82091d421a06db8e37a20bbbfbc017416fea2a0c (diff) | |
| download | rust-6641233b34fd910864131febb22f71777a7add6a.tar.gz rust-6641233b34fd910864131febb22f71777a7add6a.zip | |
Reduce repetition around `lower_method_sig`
| -rw-r--r-- | src/librustc/hir/lowering.rs | 67 |
1 files changed, 29 insertions, 38 deletions
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index c4d8100a1ca..30537f41178 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -2905,17 +2905,14 @@ impl<'a> LoweringContext<'a> { ), TraitItemKind::Method(ref sig, None) => { let names = self.lower_fn_args_to_names(&sig.decl); - self.add_in_band_defs( + let (generics, sig) = self.lower_method_sig( &i.generics, + sig, trait_item_def_id, - AnonymousLifetimeMode::PassThrough, - |this| { - hir::TraitItemKind::Method( - this.lower_method_sig(sig, trait_item_def_id, false, None), - hir::TraitMethod::Required(names), - ) - }, - ) + false, + None, + ); + (generics, hir::TraitItemKind::Method(sig, hir::TraitMethod::Required(names))) } TraitItemKind::Method(ref sig, Some(ref body)) => { let body_id = self.lower_body(Some(&sig.decl), |this| { @@ -2923,17 +2920,15 @@ impl<'a> LoweringContext<'a> { this.expr_block(body, ThinVec::new()) }); - self.add_in_band_defs( + let (generics, sig) = self.lower_method_sig( &i.generics, + sig, trait_item_def_id, - AnonymousLifetimeMode::PassThrough, - |this| { - hir::TraitItemKind::Method( - this.lower_method_sig(sig, trait_item_def_id, false, None), - hir::TraitMethod::Provided(body_id), - ) - }, - ) + false, + None, + ); + + (generics, hir::TraitItemKind::Method(sig, hir::TraitMethod::Provided(body_id))) } TraitItemKind::Type(ref bounds, ref default) => ( self.lower_generics(&i.generics, ImplTraitContext::Disallowed), @@ -3001,23 +2996,14 @@ impl<'a> LoweringContext<'a> { ImplItemKind::Method(ref sig, ref body) => { let body_id = self.lower_async_body(&sig.decl, sig.header.asyncness, body); let impl_trait_return_allow = !self.is_in_trait_impl; - - self.add_in_band_defs( + let (generics, sig) = self.lower_method_sig( &i.generics, + sig, impl_item_def_id, - AnonymousLifetimeMode::PassThrough, - |this| { - hir::ImplItemKind::Method( - this.lower_method_sig( - sig, - impl_item_def_id, - impl_trait_return_allow, - sig.header.asyncness.opt_return_id(), - ), - body_id, - ) - }, - ) + impl_trait_return_allow, + sig.header.asyncness.opt_return_id(), + ); + (generics, hir::ImplItemKind::Method(sig, body_id)) } ImplItemKind::Type(ref ty) => ( self.lower_generics(&i.generics, ImplTraitContext::Disallowed), @@ -3231,15 +3217,20 @@ impl<'a> LoweringContext<'a> { fn lower_method_sig( &mut self, + generics: &Generics, sig: &MethodSig, fn_def_id: DefId, impl_trait_return_allow: bool, is_async: Option<NodeId>, - ) -> hir::MethodSig { - hir::MethodSig { - header: self.lower_fn_header(sig.header), - decl: self.lower_fn_decl(&sig.decl, Some(fn_def_id), impl_trait_return_allow, is_async), - } + ) -> (hir::Generics, hir::MethodSig) { + let header = self.lower_fn_header(sig.header); + let (generics, decl) = self.add_in_band_defs( + generics, + fn_def_id, + AnonymousLifetimeMode::PassThrough, + |cx| cx.lower_fn_decl(&sig.decl, Some(fn_def_id), impl_trait_return_allow, is_async), + ); + (generics, hir::MethodSig { header, decl }) } fn lower_is_auto(&mut self, a: IsAuto) -> hir::IsAuto { |
