diff options
author | Nadrieril | 2020-01-30 19:56:31 +0000 |
---|---|---|
committer | Nadrieril | 2020-01-30 19:56:31 +0000 |
commit | d8de45763037937b5c2dedbe5f7bb95a4e7bc7cd (patch) | |
tree | 0c73b8ec2df6e8f592136133f07957e3ae8e8931 /dhall/src/semantics/nze/normalize.rs | |
parent | 673a580e11d31356bec25d73213b283685fd6ea3 (diff) |
Avoid unnecessary allocations of `Value`s
Diffstat (limited to 'dhall/src/semantics/nze/normalize.rs')
-rw-r--r-- | dhall/src/semantics/nze/normalize.rs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/dhall/src/semantics/nze/normalize.rs b/dhall/src/semantics/nze/normalize.rs index 7632d12..e677f78 100644 --- a/dhall/src/semantics/nze/normalize.rs +++ b/dhall/src/semantics/nze/normalize.rs @@ -445,14 +445,9 @@ pub(crate) fn normalize_one_layer( } /// Normalize a TyExpr into WHNF -pub(crate) fn normalize_tyexpr_whnf(tye: &TyExpr, env: &NzEnv) -> Value { - let ty = match tye.get_type() { - Ok(ty) => ty, - Err(_) => return Value::from_const(Const::Sort), - }; - - let kind = match tye.kind() { - TyExprKind::Var(var) => return env.lookup_val(var), +pub(crate) fn normalize_tyexpr_whnf(tye: &TyExpr, env: &NzEnv) -> ValueKind { + match tye.kind() { + TyExprKind::Var(var) => env.lookup_val(var), TyExprKind::Expr(ExprKind::Lam(binder, annot, body)) => { let annot = annot.eval(env); ValueKind::LamClosure { @@ -472,13 +467,15 @@ pub(crate) fn normalize_tyexpr_whnf(tye: &TyExpr, env: &NzEnv) -> Value { } TyExprKind::Expr(ExprKind::Let(_, None, val, body)) => { let val = val.eval(env); - return body.eval(&env.insert_value(val)); + body.eval(&env.insert_value(val)).kind().clone() } TyExprKind::Expr(e) => { + let ty = match tye.get_type() { + Ok(ty) => ty, + Err(_) => return ValueKind::Const(Const::Sort), + }; let e = e.map_ref(|tye| tye.eval(env)); normalize_one_layer(e, &ty, env) } - }; - - Value::from_kind_and_type(kind, ty) + } } |