mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 07:14:46 +00:00
fix #333: bug with symbol in if condition
This commit is contained in:
parent
917ec9c44c
commit
2bcaf3921f
2 changed files with 21 additions and 6 deletions
|
@ -1732,4 +1732,20 @@ mod gen_primitives {
|
|||
|_| 0
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hof_conditional() {
|
||||
// exposed issue with the if condition being just a symbol
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
passTrue = \f -> f True
|
||||
|
||||
passTrue (\trueVal -> if trueVal then False else True)
|
||||
"#
|
||||
),
|
||||
0,
|
||||
u8
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3678,7 +3678,7 @@ pub fn from_can<'a>(
|
|||
let mut stmt = from_can(env, branch_var, final_else.value, procs, layout_cache);
|
||||
|
||||
for (loc_cond, loc_then) in branches.into_iter().rev() {
|
||||
let branching_symbol = env.unique_symbol();
|
||||
let branching_symbol = possible_reuse_symbol(env, procs, &loc_cond.value);
|
||||
let then = from_can(env, branch_var, loc_then.value, procs, layout_cache);
|
||||
|
||||
stmt = Stmt::Cond {
|
||||
|
@ -3691,15 +3691,14 @@ pub fn from_can<'a>(
|
|||
ret_layout: ret_layout.clone(),
|
||||
};
|
||||
|
||||
// add condition
|
||||
stmt = with_hole(
|
||||
stmt = assign_to_symbol(
|
||||
env,
|
||||
loc_cond.value,
|
||||
cond_var,
|
||||
procs,
|
||||
layout_cache,
|
||||
cond_var,
|
||||
loc_cond,
|
||||
branching_symbol,
|
||||
env.arena.alloc(stmt),
|
||||
stmt,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue