Rename some things

This commit is contained in:
Richard Feldman 2019-12-24 09:40:50 -08:00
parent 9012cad4c2
commit 5ff26476fd
4 changed files with 29 additions and 22 deletions

View file

@ -32,7 +32,7 @@ use std::fmt::Debug;
pub struct Def {
pub pattern: Located<Pattern>,
pub expr: Located<Expr>,
pub variables_by_symbol: SendMap<Symbol, Variable>,
pub vars_by_symbol: SendMap<Symbol, Variable>,
}
#[derive(Debug)]
@ -98,6 +98,7 @@ pub fn canonicalize_defs<'a>(
it.next();
let typed = TypedDef(body_pattern, annotation.clone(), body_expr);
canonicalize_def(
rigids,
found_rigids,
@ -174,6 +175,7 @@ pub fn sort_can_defs(
let mut visited_symbols = MutSet::default();
let returned_locals = ImSet::clone(&output.references.locals);
// Start with the return expression's referenced locals. They're the only ones that count!
//
// If I have two defs which reference each other, but neither of them is referenced
@ -367,7 +369,7 @@ fn canonicalize_def<'a>(
// Make types for the body expr, even if we won't end up having a body.
let expr_var = var_store.fresh();
let expr_type = Type::Variable(expr_var);
let mut variables_by_symbol = SendMap::default();
let mut vars_by_symbol = SendMap::default();
// Each def gets to have all the idents in scope that are defined in this
// block. Order of defs doesn't matter, thanks to referential transparency!
@ -474,7 +476,7 @@ fn canonicalize_def<'a>(
// TODO try to remove this .clone()!
value: loc_can_expr.value.clone(),
},
variables_by_symbol: im::HashMap::clone(&variables_by_symbol),
vars_by_symbol: im::HashMap::clone(&vars_by_symbol),
},
);
}
@ -496,7 +498,7 @@ fn canonicalize_def<'a>(
(&loc_pattern.value, &loc_can_pattern.value)
{
env.tailcallable_symbol = Some(defined_symbol.clone());
variables_by_symbol.insert(defined_symbol.clone(), expr_var);
vars_by_symbol.insert(defined_symbol.clone(), expr_var);
};
let (seen_rigids, can_annotation) =
@ -651,7 +653,7 @@ fn canonicalize_def<'a>(
// TODO try to remove this .clone()!
value: loc_can_expr.value.clone(),
},
variables_by_symbol: im::HashMap::clone(&variables_by_symbol),
vars_by_symbol: im::HashMap::clone(&vars_by_symbol),
},
);
}
@ -676,7 +678,9 @@ fn canonicalize_def<'a>(
) = (&loc_pattern.value, &loc_can_pattern.value)
{
env.tailcallable_symbol = Some(defined_symbol.clone());
variables_by_symbol.insert(defined_symbol.clone(), expr_var);
// TODO isn't types_by_symbol enough? Do we need vars_by_symbol too?
vars_by_symbol.insert(defined_symbol.clone(), expr_var);
};
let (mut loc_can_expr, can_output, ret_constraint) = canonicalize_expr(
@ -800,13 +804,14 @@ fn canonicalize_def<'a>(
// TODO try to remove this .clone()!
value: loc_can_expr.value.clone(),
},
variables_by_symbol: im::HashMap::clone(&variables_by_symbol),
vars_by_symbol: im::HashMap::clone(&vars_by_symbol),
},
);
}
}
Nested(value) => {
return canonicalize_def(
canonicalize_def(
rigids,
found_rigids,
env,

View file

@ -372,7 +372,7 @@ pub fn solve_loaded(
// All the top-level defs should also be available in vars_by_symbol
for def in module.defs.iter() {
for (symbol, var) in def.variables_by_symbol.iter() {
for (symbol, var) in def.vars_by_symbol.iter() {
vars_by_symbol.insert(symbol.clone(), var.clone());
}
}
@ -397,7 +397,7 @@ pub fn solve_loaded(
// All its top-level defs should also be available in vars_by_symbol
for def in valid_dep.defs {
for (symbol, var) in def.variables_by_symbol {
for (symbol, var) in def.vars_by_symbol {
vars_by_symbol.insert(symbol, var);
}
}

View file

@ -200,13 +200,14 @@ fn solve(
subs,
&let_con.defs_constraint,
);
// Add a variable for each assignment to the vars_by_symbol.
let mut locals = ImMap::default();
// Add a variable for each def to new_vars_by_env.
let mut local_def_vars = ImMap::default();
for (symbol, loc_type) in let_con.def_types.iter() {
let var = type_to_var(subs, rank, pools, &loc_type.value);
locals.insert(
local_def_vars.insert(
symbol.clone(),
Located {
value: var,
@ -214,9 +215,10 @@ fn solve(
},
);
}
let mut new_vars_by_symbol = vars_by_symbol.clone();
for (symbol, loc_var) in locals.iter() {
for (symbol, loc_var) in local_def_vars.iter() {
if !new_vars_by_symbol.contains_key(&symbol) {
new_vars_by_symbol.insert(symbol.clone(), loc_var.value);
}
@ -232,7 +234,7 @@ fn solve(
ret_con,
);
for (symbol, loc_var) in locals {
for (symbol, loc_var) in local_def_vars {
check_for_infinite_type(subs, problems, symbol, loc_var);
}
@ -264,13 +266,13 @@ fn solve(
pool.extend(flex_vars.iter());
// Add a variable for each assignment to the vars_by_symbol.
let mut locals = ImMap::default();
let mut local_def_vars = ImMap::default();
for (symbol, loc_type) in let_con.def_types.iter() {
let def_type = loc_type.value.clone();
let var = type_to_var(subs, next_rank, next_pools, &def_type);
locals.insert(
local_def_vars.insert(
symbol.clone(),
Located {
value: var,
@ -307,7 +309,7 @@ fn solve(
let mut new_vars_by_symbol = vars_by_symbol.clone();
for (symbol, loc_var) in locals.iter() {
for (symbol, loc_var) in local_def_vars.iter() {
if !new_vars_by_symbol.contains_key(&symbol) {
new_vars_by_symbol.insert(symbol.clone(), loc_var.value);
}
@ -332,7 +334,7 @@ fn solve(
&ret_con,
);
for (symbol, loc_var) in locals {
for (symbol, loc_var) in local_def_vars {
check_for_infinite_type(subs, problems, symbol, loc_var);
}

View file

@ -171,10 +171,10 @@ mod test_load {
assert_eq!(expected_types.len(), module.defs.len());
for def in module.defs {
for (symbol, var) in def.variables_by_symbol {
let content = subs.get(var).content;
for (symbol, expr_var) in def.vars_by_symbol {
let content = subs.get(expr_var).content;
name_all_type_vars(var, &mut subs);
name_all_type_vars(expr_var, &mut subs);
let actual_str = content_to_string(content, &mut subs);
let expected_type = expected_types