Fix load_builtin_aliases ordering

This commit is contained in:
Richard Feldman 2020-05-26 00:04:30 -04:00
parent f31e260e2f
commit 4295dec955
9 changed files with 38 additions and 34 deletions

View file

@ -467,7 +467,7 @@ pub fn uniq_expr_with(
constrain_imported_values(imports, constraint, &var_store);
// load builtin types
let mut constraint = load_builtin_aliases(&stdlib.aliases, constraint, &var_store);
let mut constraint = load_builtin_aliases(stdlib.aliases, constraint, &var_store);
constraint.instantiate_aliases(&var_store);
@ -546,8 +546,7 @@ pub fn can_expr_with(arena: &Bump, home: ModuleId, expr_str: &str) -> Result<Can
// }
//load builtin types
let mut constraint =
load_builtin_aliases(&roc_builtins::std::aliases(), constraint, &var_store);
let mut constraint = load_builtin_aliases(roc_builtins::std::aliases(), constraint, &var_store);
constraint.instantiate_aliases(&var_store);

View file

@ -114,15 +114,13 @@ pub fn constrain_imported_values(
)
}
pub fn load_builtin_aliases(
aliases: &MutMap<Symbol, BuiltinAlias>,
body_con: Constraint,
var_store: &VarStore,
) -> Constraint {
pub fn load_builtin_aliases<I>(aliases: I, body_con: Constraint, var_store: &VarStore) -> Constraint
where
I: IntoIterator<Item = (Symbol, BuiltinAlias)>,
{
use Constraint::*;
// Load all builtin aliases.
// TODO load only the ones actually used in this module
// Load all the given builtin aliases.
let mut def_aliases = SendMap::default();
for (symbol, builtin_alias) in aliases {
@ -154,7 +152,7 @@ pub fn load_builtin_aliases(
typ: actual,
};
def_aliases.insert(*symbol, alias);
def_aliases.insert(symbol, alias);
}
Let(Box::new(LetConstraint {

View file

@ -184,7 +184,7 @@ pub fn uniq_expr_with(
constrain_imported_values(imports, constraint, &var_store);
// load builtin types
let mut constraint = load_builtin_aliases(&stdlib.aliases, constraint, &var_store);
let mut constraint = load_builtin_aliases(stdlib.aliases, constraint, &var_store);
constraint.instantiate_aliases(&var_store);
@ -292,8 +292,7 @@ pub fn can_expr_with(arena: &Bump, home: ModuleId, expr_str: &str) -> CanExprOut
// }
//load builtin types
let mut constraint =
load_builtin_aliases(&roc_builtins::std::aliases(), constraint, &var_store);
let mut constraint = load_builtin_aliases(roc_builtins::std::aliases(), constraint, &var_store);
constraint.instantiate_aliases(&var_store);

View file

@ -15,7 +15,7 @@ use roc_region::all::{Located, Region};
use roc_solve::solve;
use roc_solve::module::SolvedModule;
use roc_types::types;
use roc_types::solved_types::{Solved, SolvedType};
use roc_types::solved_types::{Solved, SolvedType, BuiltinAlias};
use roc_types::subs::{Subs, VarStore, Variable};
use std::collections::{HashMap, HashSet};
use std::fs::read_to_string;
@ -883,22 +883,24 @@ fn spawn_solve_module(
}
}
let constraint = load_builtin_aliases(&stdlib.aliases, constraint, &var_store);
for unused_import in unused_imports {
todo!("TODO gracefully handle unused import {:?} from module {:?}", unused_import, home);
}
// TODO include only the aliases actually used in this module
let aliases = stdlib.aliases.iter().map(|(symbol, alias)| {
(*symbol, alias.clone())
}).collect::<Vec<(Symbol, BuiltinAlias)>>();
// Start solving this module in the background.
spawn_blocking(move || {
// Finish constraining the module by wrapping the existing Constraint
// in the ones we just computed. We can do this off the main thread.
// TODO what to do with the introduced rigids?
let (_introduced_rigids, constraint) =
constrain_imported_values(imported_symbols, constraint, &var_store);
let mut constraint = constrain_imported_aliases(imported_aliases, constraint, &var_store);
let constraint = constrain_imported_aliases(imported_aliases, constraint, &var_store);
let mut constraint = load_builtin_aliases(aliases, constraint, &var_store);
// Turn Apply into Alias
constraint.instantiate_aliases(&var_store);

View file

@ -19,6 +19,7 @@ use roc_parse::parser::{loc, Fail, Parser, State};
use roc_problem::can::Problem;
use roc_region::all::{Located, Region};
use roc_solve::solve;
use roc_types::solved_types::BuiltinAlias;
use roc_types::subs::{Content, Subs, VarStore, Variable};
use roc_types::types::Type;
use std::hash::Hash;
@ -178,7 +179,7 @@ pub fn uniq_expr_with(
constrain_imported_values(imports, constraint, &var_store);
// load builtin types
let mut constraint = load_builtin_aliases(&stdlib.aliases, constraint, &var_store);
let mut constraint = load_builtin_aliases(stdlib.aliases, constraint, &var_store);
constraint.instantiate_aliases(&var_store);
@ -258,9 +259,14 @@ pub fn can_expr_with(arena: &Bump, home: ModuleId, expr_str: &str) -> CanExprOut
let (_introduced_rigids, constraint) =
constrain_imported_values(imports, constraint, &var_store);
// TODO include only the aliases actually used in this module
let aliases = roc_builtins::std::aliases()
.iter()
.map(|(symbol, alias)| (*symbol, alias.clone()))
.collect::<Vec<(Symbol, BuiltinAlias)>>();
//load builtin types
let mut constraint =
load_builtin_aliases(&roc_builtins::std::aliases(), constraint, &var_store);
let mut constraint = load_builtin_aliases(aliases.into_iter(), constraint, &var_store);
constraint.instantiate_aliases(&var_store);

View file

@ -161,7 +161,7 @@ pub fn uniq_expr_with(
constrain_imported_values(imports, constraint, &var_store);
// load builtin types
let mut constraint = load_builtin_aliases(&stdlib.aliases, constraint, &var_store);
let mut constraint = load_builtin_aliases(stdlib.aliases, constraint, &var_store);
constraint.instantiate_aliases(&var_store);
@ -242,8 +242,7 @@ pub fn can_expr_with(arena: &Bump, home: ModuleId, expr_str: &str) -> CanExprOut
constrain_imported_values(imports, constraint, &var_store);
//load builtin types
let mut constraint =
load_builtin_aliases(&roc_builtins::std::aliases(), constraint, &var_store);
let mut constraint = load_builtin_aliases(roc_builtins::std::aliases(), constraint, &var_store);
constraint.instantiate_aliases(&var_store);

View file

@ -195,8 +195,7 @@ pub fn can_expr_with(
constrain_imported_values(imports, constraint, &var_store);
//load builtin types
let mut constraint =
load_builtin_aliases(&roc_builtins::std::aliases(), constraint, &var_store);
let mut constraint = load_builtin_aliases(roc_builtins::std::aliases(), constraint, &var_store);
constraint.instantiate_aliases(&var_store);

View file

@ -182,7 +182,7 @@ pub fn uniq_expr_with(
constrain_imported_values(imports, constraint, &var_store);
// load builtin types
let mut constraint = load_builtin_aliases(&stdlib.aliases, constraint, &var_store);
let mut constraint = load_builtin_aliases(stdlib.aliases, constraint, &var_store);
constraint.instantiate_aliases(&var_store);
@ -263,8 +263,11 @@ pub fn can_expr_with(arena: &Bump, home: ModuleId, expr_str: &str) -> CanExprOut
constrain_imported_values(imports, constraint, &var_store);
//load builtin types
let mut constraint =
load_builtin_aliases(&roc_builtins::std::aliases(), constraint, &var_store);
let mut constraint = load_builtin_aliases(
roc_builtins::std::aliases().into_iter(),
constraint,
&var_store,
);
constraint.instantiate_aliases(&var_store);

View file

@ -182,7 +182,7 @@ pub fn uniq_expr_with(
constrain_imported_values(imports, constraint, &var_store);
// load builtin types
let mut constraint = load_builtin_aliases(&stdlib.aliases, constraint, &var_store);
let mut constraint = load_builtin_aliases(stdlib.aliases, constraint, &var_store);
constraint.instantiate_aliases(&var_store);
@ -263,8 +263,7 @@ pub fn can_expr_with(arena: &Bump, home: ModuleId, expr_str: &str) -> CanExprOut
constrain_imported_values(imports, constraint, &var_store);
//load builtin types
let mut constraint =
load_builtin_aliases(&roc_builtins::std::aliases(), constraint, &var_store);
let mut constraint = load_builtin_aliases(roc_builtins::std::aliases(), constraint, &var_store);
constraint.instantiate_aliases(&var_store);