mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 06:44:46 +00:00
use Vec instead of MutMap
This commit is contained in:
parent
9d82f795b7
commit
1ef9546391
2 changed files with 13 additions and 12 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue