summaryrefslogtreecommitdiff
path: root/dhall/src/semantics/nze/env.rs
diff options
context:
space:
mode:
authorNadrieril2020-01-30 19:56:31 +0000
committerNadrieril2020-01-30 19:56:31 +0000
commitd8de45763037937b5c2dedbe5f7bb95a4e7bc7cd (patch)
tree0c73b8ec2df6e8f592136133f07957e3ae8e8931 /dhall/src/semantics/nze/env.rs
parent673a580e11d31356bec25d73213b283685fd6ea3 (diff)
Avoid unnecessary allocations of `Value`s
Diffstat (limited to 'dhall/src/semantics/nze/env.rs')
-rw-r--r--dhall/src/semantics/nze/env.rs16
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(),
}
}
}