From 2b8d63d9cce1b11ce330ec263c68ec6bae84a06b Mon Sep 17 00:00:00 2001 From: greg Date: Thu, 1 Mar 2018 22:32:38 -0800 Subject: [PATCH] Better debugging for types --- src/schala_lang/typechecking.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/schala_lang/typechecking.rs b/src/schala_lang/typechecking.rs index fbc1967..11361d4 100644 --- a/src/schala_lang/typechecking.rs +++ b/src/schala_lang/typechecking.rs @@ -1,6 +1,8 @@ use std::rc::Rc; use std::collections::HashMap; use std::char; +use std::fmt; +use std::fmt::Write; use schala_lang::parsing; @@ -18,6 +20,19 @@ pub enum Type { Void } +impl fmt::Display for Type { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + use self::Type::*; + match self { + &Const(ref c) => write!(f, "{:?}", c), + &Func(ref a, ref b) => write!(f, "{} -> {}", a, b), + &UVar(ref s) => write!(f, "{}_u", s), + &EVar(ref n) => write!(f, "{}_e", n), + &Void => write!(f, "Void") + } + } +} + #[derive(Default)] struct UVarGenerator { n: u32, @@ -101,7 +116,11 @@ impl TypeContext { Ok(()) } pub fn debug_symbol_table(&self) -> String { - format!("Symbols: {:?}", self.bindings) + let mut output = format!("Symbols\n"); + for (sym, ty) in &self.bindings { + write!(output, "{} : {}\n", sym, ty); + } + output } }