From 25bd09136742403d7f3d6c6143f72e6687f39457 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Thu, 30 Jan 2020 14:48:38 +0000 Subject: Make unnormalized Values unobservable --- dhall/src/semantics/core/value.rs | 9 ++------- dhall/src/semantics/tck/tyexpr.rs | 4 +--- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/dhall/src/semantics/core/value.rs b/dhall/src/semantics/core/value.rs index 02c8013..af01177 100644 --- a/dhall/src/semantics/core/value.rs +++ b/dhall/src/semantics/core/value.rs @@ -172,17 +172,12 @@ impl Value { fn as_internal_mut(&self) -> RefMut { self.0.borrow_mut() } - /// WARNING: The returned ValueKind may be entirely unnormalized, in particular it may just be an - /// unevaled PartialExpr. You probably want to use `as_whnf`. - pub(crate) fn as_kind(&self) -> Ref> { - Ref::map(self.as_internal(), ValueInternal::as_kind) - } /// This is what you want if you want to pattern-match on the value. /// WARNING: drop this ref before normalizing the same value or you will run into BorrowMut /// panics. pub(crate) fn kind(&self) -> Ref> { self.normalize_whnf(); - self.as_kind() + Ref::map(self.as_internal(), ValueInternal::as_kind) } /// Converts a value back to the corresponding AST expression. @@ -266,7 +261,7 @@ impl Value { } pub fn to_tyexpr(&self, venv: VarEnv) -> TyExpr { - let tye = match &*self.as_kind() { + let tye = match &*self.kind() { ValueKind::Var(v) => TyExprKind::Var(venv.lookup(v)), ValueKind::LamClosure { binder, diff --git a/dhall/src/semantics/tck/tyexpr.rs b/dhall/src/semantics/tck/tyexpr.rs index bf7c130..5492b8b 100644 --- a/dhall/src/semantics/tck/tyexpr.rs +++ b/dhall/src/semantics/tck/tyexpr.rs @@ -76,9 +76,7 @@ impl TyExpr { self.normalize_whnf(&NzEnv::new()) } pub fn normalize_nf(&self, env: &NzEnv) -> Value { - let mut val = self.normalize_whnf(env); - val.normalize_mut(); - val + self.normalize_whnf(env) } pub fn normalize_nf_noenv(&self) -> Value { self.normalize_nf(&NzEnv::new()) -- cgit v1.2.3