about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOliver Schneider <github35764891676564198441@oli-obk.de>2018-06-27 11:37:52 +0200
committerOliver Schneider <github35764891676564198441@oli-obk.de>2018-06-27 11:37:52 +0200
commit98a48fdae61bfbc59e10a3aba317fb5b23ed11bf (patch)
treeca0cdfa2e3babf1b106affd78c8629764d4e46e6
parent5bd9eaa1ad20c3a84b162a825350f7b4c532e7ae (diff)
downloadrust-98a48fdae61bfbc59e10a3aba317fb5b23ed11bf.tar.gz
rust-98a48fdae61bfbc59e10a3aba317fb5b23ed11bf.zip
Deduplicate async's impl Trait id lowering
-rw-r--r--src/librustc/hir/lowering.rs14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs
index 09911292ff5..792f67b5ef5 100644
--- a/src/librustc/hir/lowering.rs
+++ b/src/librustc/hir/lowering.rs
@@ -3081,8 +3081,12 @@ impl<'a> LoweringContext<'a> {
     fn lower_impl_trait_ids(
         &mut self,
         decl: &FnDecl,
+        header: &FnHeader,
         ids: &mut SmallVector<hir::ItemId>,
     ) {
+        if let Some(id) = header.asyncness.opt_return_id() {
+            ids.push(hir::ItemId { id });
+        }
         struct IdVisitor<'a> { ids: &'a mut SmallVector<hir::ItemId> }
         impl<'a, 'b> Visitor<'a> for IdVisitor<'b> {
             fn visit_ty(&mut self, ty: &'a Ty) {
@@ -3126,20 +3130,14 @@ impl<'a> LoweringContext<'a> {
             ItemKind::MacroDef(..) => SmallVector::new(),
             ItemKind::Fn(ref decl, ref header, ..) => {
                 let mut ids = SmallVector::one(hir::ItemId { id: i.id });
-                if let Some(id) = header.asyncness.opt_return_id() {
-                    ids.push(hir::ItemId { id });
-                }
-                self.lower_impl_trait_ids(decl, &mut ids);
+                self.lower_impl_trait_ids(decl, header, &mut ids);
                 ids
             },
             ItemKind::Impl(.., None, _, ref items) => {
                 let mut ids = SmallVector::one(hir::ItemId { id: i.id });
                 for item in items {
                     if let ImplItemKind::Method(ref sig, _) = item.node {
-                        if let Some(id) = sig.header.asyncness.opt_return_id() {
-                            ids.push(hir::ItemId { id });
-                        }
-                        self.lower_impl_trait_ids(&sig.decl, &mut ids);
+                        self.lower_impl_trait_ids(&sig.decl, &sig.header, &mut ids);
                     }
                 }
                 ids