summaryrefslogtreecommitdiff
path: root/dhall/src/semantics/core/context.rs
diff options
context:
space:
mode:
Diffstat (limited to 'dhall/src/semantics/core/context.rs')
-rw-r--r--dhall/src/semantics/core/context.rs15
1 files changed, 4 insertions, 11 deletions
diff --git a/dhall/src/semantics/core/context.rs b/dhall/src/semantics/core/context.rs
index f8d6ff0..47d2d2d 100644
--- a/dhall/src/semantics/core/context.rs
+++ b/dhall/src/semantics/core/context.rs
@@ -1,5 +1,3 @@
-use std::collections::HashMap;
-
use crate::error::TypeError;
use crate::semantics::core::value::Value;
use crate::semantics::core::value::ValueKind;
@@ -40,7 +38,7 @@ impl TyCtx {
}
pub fn lookup(&self, var: &V<Label>) -> Option<Value> {
let mut var = var.clone();
- let mut shift_map: HashMap<Label, usize> = HashMap::new();
+ let mut shift_delta: isize = 0;
let mut rev_ctx = self.ctx.iter().rev().map(|(b, i)| (b.to_label(), i));
let found_item = loop {
@@ -50,7 +48,7 @@ impl TyCtx {
None => break item,
};
if let CtxItem::Kept(_, _) = item {
- *shift_map.entry(label).or_insert(0) += 1;
+ shift_delta += 1;
}
} else {
// Unbound variable
@@ -65,13 +63,8 @@ impl TyCtx {
),
CtxItem::Replaced(v) => v.clone(),
};
-
- let v = v.under_multiple_binders(&shift_map);
- // for (x, n) in shift_map {
- // let x: AlphaVar = (&x).into();
- // // Can't fail since delta is positive
- // v = v.shift(n as isize, &x).unwrap();
- // }
+ // Can't fail because delta is positive
+ let v = v.shift(shift_delta, &AlphaVar::default()).unwrap();
return Some(v);
}
// pub fn lookup_alpha(&self, var: &AlphaVar) -> Option<Value> {