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/env.rs | |
parent | 673a580e11d31356bec25d73213b283685fd6ea3 (diff) |
Avoid unnecessary allocations of `Value`s
Diffstat (limited to 'dhall/src/semantics/nze/env.rs')
-rw-r--r-- | dhall/src/semantics/nze/env.rs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/dhall/src/semantics/nze/env.rs b/dhall/src/semantics/nze/env.rs index 073886e..0b22a8b 100644 --- a/dhall/src/semantics/nze/env.rs +++ b/dhall/src/semantics/nze/env.rs @@ -59,14 +59,18 @@ impl NzEnv { env.items.push(NzEnvItem::Replaced(e)); env } - pub fn lookup_val(&self, var: &AlphaVar) -> Value { + pub fn lookup_val(&self, var: &AlphaVar) -> ValueKind { let idx = self.items.len() - 1 - var.idx(); match &self.items[idx] { - NzEnvItem::Kept(ty) => Value::from_kind_and_type( - ValueKind::Var(NzVar::new(idx)), - ty.clone(), - ), - NzEnvItem::Replaced(x) => x.clone(), + NzEnvItem::Kept(_) => ValueKind::Var(NzVar::new(idx)), + NzEnvItem::Replaced(x) => x.kind().clone(), + } + } + pub fn lookup_ty(&self, var: &AlphaVar) -> Value { + let idx = self.items.len() - 1 - var.idx(); + match &self.items[idx] { + NzEnvItem::Kept(ty) => ty.clone(), + NzEnvItem::Replaced(x) => x.get_type().unwrap(), } } } |