From a9804009f405be7e8a89e301f280ee9d51b57e5e Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Thu, 15 Aug 2019 13:08:25 +0200 Subject: Custom Debug impls to improve debug legibility --- dhall/src/core/thunk.rs | 21 ++++++++++++++++++++- dhall/src/core/var.rs | 19 +++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) (limited to 'dhall') diff --git a/dhall/src/core/thunk.rs b/dhall/src/core/thunk.rs index 7c5c537..14d8792 100644 --- a/dhall/src/core/thunk.rs +++ b/dhall/src/core/thunk.rs @@ -39,7 +39,7 @@ enum ThunkInternal { /// Stores a possibly unevaluated value. Gets (partially) normalized on-demand, /// sharing computation automatically. /// Uses a RefCell to share computation. -#[derive(Debug, Clone)] +#[derive(Clone)] pub struct Thunk(Rc>); /// A thunk in type position. Can optionally store a Type from the typechecking phase to preserve @@ -393,3 +393,22 @@ impl std::cmp::PartialEq for TypedThunk { } } impl std::cmp::Eq for TypedThunk {} + +impl std::fmt::Debug for Thunk { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let b: &ThunkInternal = &self.0.borrow(); + match b { + ThunkInternal::Value(m, v) => { + f.debug_tuple(&format!("Thunk@{:?}", m)).field(v).finish() + } + ThunkInternal::PartialExpr(e) => { + f.debug_tuple("Thunk@PartialExpr").field(e).finish() + } + ThunkInternal::Unnormalized(ctx, e) => f + .debug_tuple("Thunk@Unnormalized") + .field(ctx) + .field(e) + .finish(), + } + } +} diff --git a/dhall/src/core/var.rs b/dhall/src/core/var.rs index 0faa091..d53c194 100644 --- a/dhall/src/core/var.rs +++ b/dhall/src/core/var.rs @@ -5,7 +5,7 @@ use dhall_syntax::{Label, V}; /// Stores a pair of variables: a normal one and if relevant one /// that corresponds to the alpha-normalized version of the first one. /// Equality is up to alpha-equivalence. -#[derive(Debug, Clone, Eq)] +#[derive(Clone, Eq)] pub struct AlphaVar { normal: V