summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_mir_dataflow/src/framework/fmt.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_mir_dataflow/src/framework/fmt.rs')
-rw-r--r--compiler/rustc_mir_dataflow/src/framework/fmt.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/compiler/rustc_mir_dataflow/src/framework/fmt.rs b/compiler/rustc_mir_dataflow/src/framework/fmt.rs
index 6a256fae3..e3a66bd95 100644
--- a/compiler/rustc_mir_dataflow/src/framework/fmt.rs
+++ b/compiler/rustc_mir_dataflow/src/framework/fmt.rs
@@ -1,6 +1,7 @@
//! Custom formatting traits used when outputting Graphviz diagrams with the results of a dataflow
//! analysis.
+use super::lattice::MaybeReachable;
use rustc_index::bit_set::{BitSet, ChunkedBitSet, HybridBitSet};
use rustc_index::Idx;
use std::fmt;
@@ -124,6 +125,37 @@ where
}
}
+impl<S, C> DebugWithContext<C> for MaybeReachable<S>
+where
+ S: DebugWithContext<C>,
+{
+ fn fmt_with(&self, ctxt: &C, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ MaybeReachable::Unreachable => {
+ write!(f, "unreachable")
+ }
+ MaybeReachable::Reachable(set) => set.fmt_with(ctxt, f),
+ }
+ }
+
+ fn fmt_diff_with(&self, old: &Self, ctxt: &C, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match (self, old) {
+ (MaybeReachable::Unreachable, MaybeReachable::Unreachable) => Ok(()),
+ (MaybeReachable::Unreachable, MaybeReachable::Reachable(set)) => {
+ write!(f, "\u{001f}+")?;
+ set.fmt_with(ctxt, f)
+ }
+ (MaybeReachable::Reachable(set), MaybeReachable::Unreachable) => {
+ write!(f, "\u{001f}-")?;
+ set.fmt_with(ctxt, f)
+ }
+ (MaybeReachable::Reachable(this), MaybeReachable::Reachable(old)) => {
+ this.fmt_diff_with(old, ctxt, f)
+ }
+ }
+ }
+}
+
fn fmt_diff<T, C>(
inserted: &HybridBitSet<T>,
removed: &HybridBitSet<T>,