]> git.lizzy.rs Git - rust.git/commitdiff
rustc/middle: improve allocations
authorljedrz <ljedrz@gmail.com>
Tue, 2 Oct 2018 16:21:39 +0000 (18:21 +0200)
committerljedrz <ljedrz@gmail.com>
Sat, 6 Oct 2018 08:24:54 +0000 (10:24 +0200)
src/librustc/middle/liveness.rs
src/librustc/middle/reachable.rs

index 56f67328458d380a9fa93d8db52f80fb395875bd..e0d6bc104a9fef158e288e9a1be54bad7e004c13 100644 (file)
@@ -474,13 +474,15 @@ fn visit_expr<'a, 'tcx>(ir: &mut IrMaps<'a, 'tcx>, expr: &'tcx Expr) {
         // construction site.
         let mut call_caps = Vec::new();
         ir.tcx.with_freevars(expr.id, |freevars| {
-            for fv in freevars {
+            call_caps.extend(freevars.iter().filter_map(|fv| {
                 if let Def::Local(rv) = fv.def {
                     let fv_ln = ir.add_live_node(FreeVarNode(fv.span));
                     let var_hid = ir.tcx.hir.node_to_hir_id(rv);
-                    call_caps.push(CaptureInfo { ln: fv_ln, var_hid });
+                    Some(CaptureInfo { ln: fv_ln, var_hid })
+                } else {
+                    None
                 }
-            }
+            }));
         });
         ir.set_captures(expr.id, call_caps);
 
index 9416d60c9d1a3bfeb05a4c56737f5d3b5ed39e26..03a6036b4ea9211e52f032d0a94b3bd9b94568a3 100644 (file)
@@ -371,7 +371,9 @@ fn visit_item(&mut self, item: &hir::Item) {
                     return
                 }
 
-                for default_method in self.tcx.provided_trait_methods(trait_def_id) {
+                let provided_trait_methods = self.tcx.provided_trait_methods(trait_def_id);
+                self.worklist.reserve(provided_trait_methods.len());
+                for default_method in provided_trait_methods {
                     let node_id = self.tcx
                                       .hir
                                       .as_local_node_id(default_method.def_id)