use Vec instead of MutMap

This commit is contained in:
Folkert 2022-02-28 23:54:35 +01:00
parent 9d82f795b7
commit 1ef9546391
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
2 changed files with 13 additions and 12 deletions

View file

@ -78,25 +78,29 @@ pub enum TypeError {
#[derive(Clone, Debug, Default)] #[derive(Clone, Debug, Default)]
pub struct Env { pub struct Env {
vars_by_symbol: MutMap<Symbol, Variable>, vars_by_symbol: Vec<(Symbol, Variable)>,
} }
impl Env { impl Env {
pub fn vars_by_symbol(&self) -> MutMap<Symbol, Variable> { pub fn vars_by_symbol(&self) -> MutMap<Symbol, Variable> {
self.vars_by_symbol.clone() self.vars_by_symbol.iter().copied().collect()
} }
fn get_var_by_symbol(&self, symbol: &Symbol) -> Option<Variable> { fn get_var_by_symbol(&self, symbol: &Symbol) -> Option<Variable> {
self.vars_by_symbol.get(symbol).copied() self.vars_by_symbol
.iter()
.find(|(s, _)| s == symbol)
.map(|(_, var)| *var)
} }
fn insert_symbol_var_if_vacant(&mut self, symbol: Symbol, var: Variable) { fn insert_symbol_var_if_vacant(&mut self, symbol: Symbol, var: Variable) {
match self.vars_by_symbol.entry(symbol) { match self.get_var_by_symbol(&symbol) {
Entry::Occupied(_) => { None => {
// keep the existing value // symbol is not in vars_by_symbol yet; insert it
self.vars_by_symbol.push((symbol, var))
} }
Entry::Vacant(vacant) => { Some(_) => {
vacant.insert(var); // do nothing
} }
} }
} }

View file

@ -31,10 +31,7 @@ pub fn infer_expr(
constraint: &Constraint, constraint: &Constraint,
expr_var: Variable, expr_var: Variable,
) -> (Content, Subs) { ) -> (Content, Subs) {
let env = solve::Env { let env = solve::Env::default();
aliases: MutMap::default(),
vars_by_symbol: MutMap::default(),
};
let (solved, _) = solve::run(&env, problems, subs, constraint); let (solved, _) = solve::run(&env, problems, subs, constraint);
let content = solved let content = solved