fix issue with same names causing 0 index debruijn for var
This commit is contained in:
parent
027daf30ea
commit
4eafdd2d39
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -75,7 +75,6 @@ fn fibonacci() {
|
|||
}
|
||||
|
||||
// TODO: This is failing, see Bug: https://github.com/txpipe/aiken/issues/10
|
||||
#[ignore]
|
||||
#[test]
|
||||
fn one_way_fibonacci() {
|
||||
let bytes = include_bytes!("../test_data/fibonacci/fibonacci.flat");
|
||||
|
@ -86,4 +85,5 @@ fn one_way_fibonacci() {
|
|||
let code = include_str!("../test_data/fibonacci/unsanitary_fibonacci.uplc");
|
||||
|
||||
parsed_program_matches_decoded_bytes(bytes, code);
|
||||
encoded_program_matches_bytes(bytes, code);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue