Converted Interner to work with Rc-s

- Interner no longer contains unsafe code
- Tokens now hold a reference to the value they represent directly

This will enable many future improvements
This commit is contained in:
2023-08-19 14:03:05 +01:00
parent ab0b57b1b8
commit 0b887ced70
62 changed files with 592 additions and 762 deletions

View File

@@ -17,7 +17,7 @@ fn resolve_rec(
Some(alias.clone())
} else if let Some((foot, body)) = namespace.split_last() {
let mut new_beginning = resolve_rec(body, alias_map)?;
new_beginning.push(*foot);
new_beginning.push(foot.clone());
Some(new_beginning)
} else {
None
@@ -61,7 +61,7 @@ fn apply_aliases_rec(
ModMember::Item(expr) =>
ModMember::Item(process_expr(expr, alias_map, injected_as)),
ModMember::Sub(module) => {
let subpath = path.push(*name);
let subpath = path.push(name.clone());
let new_mod = if !updated(&subpath.iter().rev_vec_clone()) {
module.clone()
} else {
@@ -70,7 +70,7 @@ fn apply_aliases_rec(
ModMember::Sub(new_mod)
},
};
(*name, ModEntry { exported: *exported, member })
(name.clone(), ModEntry { exported: *exported, member })
})
.collect::<HashMap<_, _>>();
let rules = (module.extra.rules.iter())
@@ -94,7 +94,7 @@ fn apply_aliases_rec(
rules,
exports: (module.extra.exports.iter())
.map(|(k, v)| {
(*k, resolve(v, alias_map, injected_as).unwrap_or(v.clone()))
(k.clone(), resolve(v, alias_map, injected_as).unwrap_or(v.clone()))
})
.collect(),
file: module.extra.file.clone(),