mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 00:24:34 +00:00
handle some edge cases
This commit is contained in:
parent
49408d3a56
commit
7a7a99f118
1 changed files with 16 additions and 7 deletions
|
@ -12,6 +12,7 @@ use roc_collections::all::{default_hasher, BumpMap, MutMap, MutSet};
|
||||||
use roc_constrain::module::{
|
use roc_constrain::module::{
|
||||||
constrain_imports, constrain_module, ExposedByModule, ExposedForModule, ExposedModuleTypes,
|
constrain_imports, constrain_module, ExposedByModule, ExposedForModule, ExposedModuleTypes,
|
||||||
};
|
};
|
||||||
|
use roc_error_macros::internal_error;
|
||||||
use roc_module::ident::{Ident, ModuleName, QualifiedModuleName};
|
use roc_module::ident::{Ident, ModuleName, QualifiedModuleName};
|
||||||
use roc_module::symbol::{
|
use roc_module::symbol::{
|
||||||
IdentIds, Interns, ModuleId, ModuleIds, PQModuleName, PackageModuleIds, PackageQualified,
|
IdentIds, Interns, ModuleId, ModuleIds, PQModuleName, PackageModuleIds, PackageQualified,
|
||||||
|
@ -3078,6 +3079,8 @@ fn run_solve<'a>(
|
||||||
let constrain_start = SystemTime::now();
|
let constrain_start = SystemTime::now();
|
||||||
|
|
||||||
// see if there are imported modules from which nothing is actually used
|
// see if there are imported modules from which nothing is actually used
|
||||||
|
// this is an odd time to check this, it should be part of canonicalization.
|
||||||
|
// one thing we miss is if only types are imported, but all are unused
|
||||||
let mut unused_imports = imported_modules;
|
let mut unused_imports = imported_modules;
|
||||||
|
|
||||||
let (mut rigid_vars, mut def_types) =
|
let (mut rigid_vars, mut def_types) =
|
||||||
|
@ -3101,14 +3104,18 @@ fn run_solve<'a>(
|
||||||
for symbol in exposed_for_module.imported_symbols {
|
for symbol in exposed_for_module.imported_symbols {
|
||||||
unused_imports.remove(&symbol.module_id());
|
unused_imports.remove(&symbol.module_id());
|
||||||
|
|
||||||
match exposed_for_module
|
let module_id = symbol.module_id();
|
||||||
.exposed_by_module
|
match exposed_for_module.exposed_by_module.get_mut(&module_id) {
|
||||||
.get_mut(&symbol.module_id())
|
|
||||||
{
|
|
||||||
Some(t) => match t {
|
Some(t) => match t {
|
||||||
ExposedModuleTypes::Invalid => {
|
ExposedModuleTypes::Invalid => {
|
||||||
// idk, just skip?
|
// make the type a flex var, so it unifies with anything
|
||||||
continue;
|
// this way the error is only reported in the module it originates in
|
||||||
|
let variable = subs.fresh_unnamed_flex_var();
|
||||||
|
|
||||||
|
def_types.push((
|
||||||
|
symbol,
|
||||||
|
Loc::at_zero(roc_types::types::Type::Variable(variable)),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
ExposedModuleTypes::Valid {
|
ExposedModuleTypes::Valid {
|
||||||
stored_vars_by_symbol,
|
stored_vars_by_symbol,
|
||||||
|
@ -3137,7 +3144,9 @@ fn run_solve<'a>(
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
None => todo!(),
|
None => {
|
||||||
|
internal_error!("Imported module {:?} is not available", module_id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue