fix issue with same names causing 0 index debruijn for var
This commit is contained in:
@@ -59,6 +59,8 @@ impl Converter {
|
||||
|
||||
self.end_scope();
|
||||
|
||||
self.remove_unique(parameter_name.unique);
|
||||
|
||||
Term::Lambda {
|
||||
parameter_name: name,
|
||||
body: Box::new(body),
|
||||
@@ -95,6 +97,8 @@ impl Converter {
|
||||
|
||||
self.end_scope();
|
||||
|
||||
self.remove_unique(parameter_name.unique);
|
||||
|
||||
Term::Lambda {
|
||||
parameter_name: name,
|
||||
body: Box::new(body),
|
||||
@@ -340,6 +344,12 @@ impl Converter {
|
||||
scope.insert(unique, self.current_level);
|
||||
}
|
||||
|
||||
fn remove_unique(&mut self, unique: Unique) {
|
||||
let scope = &mut self.levels[self.current_level.0];
|
||||
|
||||
scope.remove(unique, self.current_level);
|
||||
}
|
||||
|
||||
fn declare_binder(&mut self) {
|
||||
let scope = &mut self.levels[self.current_level.0];
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ use crate::ast::Unique;
|
||||
|
||||
use super::Level;
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
pub struct BiMap {
|
||||
left: HashMap<Unique, Level>,
|
||||
right: HashMap<Level, Unique>,
|
||||
@@ -22,6 +24,11 @@ impl BiMap {
|
||||
self.right.insert(level, unique);
|
||||
}
|
||||
|
||||
pub(super) fn remove(&mut self, unique: Unique, level: Level) {
|
||||
self.left.remove(&unique);
|
||||
self.right.remove(&level);
|
||||
}
|
||||
|
||||
pub(super) fn get(&self, unique: &Unique) -> Option<&Level> {
|
||||
self.left.get(unique)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user