]> git.lizzy.rs Git - rust.git/commitdiff
move `LivenessResults` from `nll` into `liveness` analysis
authorNiko Matsakis <niko@alum.mit.edu>
Sun, 3 Dec 2017 17:17:20 +0000 (12:17 -0500)
committerNiko Matsakis <niko@alum.mit.edu>
Fri, 15 Dec 2017 15:10:57 +0000 (10:10 -0500)
src/librustc_mir/borrow_check/nll/mod.rs
src/librustc_mir/util/liveness.rs

index ffbb3d319174ab46f07a5deac800dc899c646226..725694fd5b74beb97df1cda375166a196e6de0e8 100644 (file)
@@ -16,7 +16,7 @@
 use std::collections::BTreeSet;
 use std::io;
 use transform::MirSource;
-use util::liveness::{self, LivenessMode, LivenessResult, LocalSet};
+use util::liveness::{LivenessResults, LocalSet};
 use borrow_check::FlowAtLocation;
 use dataflow::MaybeInitializedLvals;
 use dataflow::move_paths::MoveData;
@@ -86,23 +86,7 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>(
     subtype_constraint_generation::generate(&mut regioncx, mir, constraint_sets);
 
     // Compute what is live where.
-    let liveness = &LivenessResults {
-        regular: liveness::liveness_of_locals(
-            &mir,
-            LivenessMode {
-                include_regular_use: true,
-                include_drops: false,
-            },
-        ),
-
-        drop: liveness::liveness_of_locals(
-            &mir,
-            LivenessMode {
-                include_regular_use: false,
-                include_drops: true,
-            },
-        ),
-    };
+    let liveness = &LivenessResults::compute(mir);
 
     // Generate non-subtyping constraints.
     constraint_generation::generate_constraints(
@@ -136,11 +120,6 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>(
     (regioncx, closure_region_requirements)
 }
 
-struct LivenessResults {
-    regular: LivenessResult,
-    drop: LivenessResult,
-}
-
 fn dump_mir_results<'a, 'gcx, 'tcx>(
     infcx: &InferCtxt<'a, 'gcx, 'tcx>,
     liveness: &LivenessResults,
index 45c3fcd8a615dbd86f809261347776696686e571..5163f74dd25298a78f20dba4fe71db3998c97655 100644 (file)
@@ -80,6 +80,39 @@ pub struct LivenessMode {
     pub include_drops: bool,
 }
 
+/// A combination of liveness results, used in NLL.
+pub struct LivenessResults {
+    /// Liveness results where a regular use makes a variable X live,
+    /// but not a drop.
+    pub regular: LivenessResult,
+
+    /// Liveness results where a drop makes a variable X live,
+    /// but not a regular use.
+    pub drop: LivenessResult,
+}
+
+impl LivenessResults {
+    pub fn compute<'tcx>(mir: &Mir<'tcx>) -> LivenessResults {
+        LivenessResults {
+            regular: liveness_of_locals(
+                &mir,
+                LivenessMode {
+                    include_regular_use: true,
+                    include_drops: false,
+                },
+            ),
+
+            drop: liveness_of_locals(
+                &mir,
+                LivenessMode {
+                    include_regular_use: false,
+                    include_drops: true,
+                },
+            ),
+        }
+    }
+}
+
 /// Compute which local variables are live within the given function
 /// `mir`. The liveness mode `mode` determines what sorts of uses are
 /// considered to make a variable live (e.g., do drops count?).