mirror of
https://github.com/roc-lang/roc.git
synced 2025-07-26 07:53:48 +00:00
Merge pull request #7285 from faldor20/purity-inference-module-params-fixes
Purity inference module params fixes
This commit is contained in:
commit
21b555d0b2
4 changed files with 31 additions and 3 deletions
|
@ -1434,6 +1434,20 @@ mod cli_tests {
|
||||||
.run()
|
.run()
|
||||||
.assert_clean_success();
|
.assert_clean_success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn module_params_effectful_param() {
|
||||||
|
let cli_check = ExecCli::new(
|
||||||
|
CMD_CHECK,
|
||||||
|
file_from_root(
|
||||||
|
"crates/cli/tests/test-projects/module_params",
|
||||||
|
"effect_module.roc",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
let cli_check_out = cli_check.run();
|
||||||
|
cli_check_out.assert_clean_success();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "wasm32-cli-run")]
|
#[cfg(feature = "wasm32-cli-run")]
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
module { stdout! } -> [log!]
|
||||||
|
|
||||||
|
log! = \msg, level -> stdout! "$(level):$(msg)"
|
|
@ -2269,18 +2269,18 @@ fn update<'a>(
|
||||||
state.fx_mode = FxMode::PurityInference;
|
state.fx_mode = FxMode::PurityInference;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Builtin { .. } | Module { .. } => {
|
Builtin { .. } => {
|
||||||
if header.is_root_module {
|
if header.is_root_module {
|
||||||
debug_assert!(matches!(state.platform_path, PlatformPath::NotSpecified));
|
debug_assert!(matches!(state.platform_path, PlatformPath::NotSpecified));
|
||||||
state.platform_path = PlatformPath::RootIsModule;
|
state.platform_path = PlatformPath::RootIsModule;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Hosted { exposes, .. } => {
|
Hosted { exposes, .. } | Module { exposes, .. } => {
|
||||||
if header.is_root_module {
|
if header.is_root_module {
|
||||||
debug_assert!(matches!(state.platform_path, PlatformPath::NotSpecified));
|
debug_assert!(matches!(state.platform_path, PlatformPath::NotSpecified));
|
||||||
state.platform_path = PlatformPath::RootIsHosted;
|
state.platform_path = PlatformPath::RootIsHosted;
|
||||||
}
|
}
|
||||||
|
// WARNING: This will be bypassed if we export a record of effectful functions. This is a temporary hacky method
|
||||||
if exposes
|
if exposes
|
||||||
.iter()
|
.iter()
|
||||||
.any(|exposed| exposed.value.is_effectful_fn())
|
.any(|exposed| exposed.value.is_effectful_fn())
|
||||||
|
|
|
@ -3345,6 +3345,17 @@ fn unify_flat_type<M: MetaCollector>(
|
||||||
|
|
||||||
outcome
|
outcome
|
||||||
}
|
}
|
||||||
|
(Func(args, closure, ret, fx), EffectfulFunc) => {
|
||||||
|
let mut outcome = unify_pool(env, pool, *fx, Variable::EFFECTFUL, ctx.mode);
|
||||||
|
|
||||||
|
outcome.union(merge(
|
||||||
|
env,
|
||||||
|
ctx,
|
||||||
|
Structure(Func(*args, *closure, *ret, Variable::EFFECTFUL)),
|
||||||
|
));
|
||||||
|
|
||||||
|
outcome
|
||||||
|
}
|
||||||
(FunctionOrTagUnion(tag_names, tag_symbols, ext), Func(args, closure, ret, fx)) => {
|
(FunctionOrTagUnion(tag_names, tag_symbols, ext), Func(args, closure, ret, fx)) => {
|
||||||
unify_function_or_tag_union_and_func(
|
unify_function_or_tag_union_and_func(
|
||||||
env,
|
env,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue