mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-01 15:51:12 +00:00
fix bug in decision_tree
This commit is contained in:
parent
ed26b07916
commit
70cba33fe4
4 changed files with 16 additions and 8 deletions
|
@ -1369,7 +1369,10 @@ pub fn load_symbol<'a, 'ctx, 'env>(
|
||||||
Some((_, ptr)) => env
|
Some((_, ptr)) => env
|
||||||
.builder
|
.builder
|
||||||
.build_load(*ptr, symbol.ident_string(&env.interns)),
|
.build_load(*ptr, symbol.ident_string(&env.interns)),
|
||||||
None => panic!("There was no entry for {:?} in scope {:?}", symbol, scope),
|
None => panic!(
|
||||||
|
"There was no entry for {:?} {} in scope {:?}",
|
||||||
|
symbol, symbol, scope
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -979,7 +979,7 @@ fn path_to_expr_help<'a>(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Some(wrapped) => {
|
Some(wrapped) => {
|
||||||
let field_layouts = match layout {
|
let field_layouts = match &layout {
|
||||||
Layout::Union(layouts) | Layout::RecursiveUnion(layouts) => {
|
Layout::Union(layouts) | Layout::RecursiveUnion(layouts) => {
|
||||||
layouts[*tag_id as usize].to_vec()
|
layouts[*tag_id as usize].to_vec()
|
||||||
}
|
}
|
||||||
|
@ -987,9 +987,10 @@ fn path_to_expr_help<'a>(
|
||||||
other => vec![other.clone()],
|
other => vec![other.clone()],
|
||||||
};
|
};
|
||||||
|
|
||||||
debug_assert!(*index < field_layouts.len() as u64);
|
let inner_layout = match &field_layouts[*index as usize] {
|
||||||
|
Layout::RecursivePointer => layout.clone(),
|
||||||
let inner_layout = field_layouts[*index as usize].clone();
|
other => other.clone(),
|
||||||
|
};
|
||||||
|
|
||||||
let inner_expr = Expr::AccessAtIndex {
|
let inner_expr = Expr::AccessAtIndex {
|
||||||
index: *index,
|
index: *index,
|
||||||
|
@ -1057,7 +1058,7 @@ fn test_to_equality<'a>(
|
||||||
let rhs_symbol = env.unique_symbol();
|
let rhs_symbol = env.unique_symbol();
|
||||||
|
|
||||||
stores.push((lhs_symbol, Layout::Builtin(Builtin::Int64), lhs));
|
stores.push((lhs_symbol, Layout::Builtin(Builtin::Int64), lhs));
|
||||||
stores.insert(0, (rhs_symbol, Layout::Builtin(Builtin::Int64), rhs));
|
stores.push((rhs_symbol, Layout::Builtin(Builtin::Int64), rhs));
|
||||||
|
|
||||||
(
|
(
|
||||||
stores,
|
stores,
|
||||||
|
@ -1324,7 +1325,8 @@ fn decide_to_branching<'a>(
|
||||||
arena.alloc(cond),
|
arena.alloc(cond),
|
||||||
);
|
);
|
||||||
|
|
||||||
for (symbol, layout, expr) in new_stores.into_iter() {
|
// stores are in top-to-bottom order, so we have to add them in reverse
|
||||||
|
for (symbol, layout, expr) in new_stores.into_iter().rev() {
|
||||||
cond = Stmt::Let(symbol, expr, layout, arena.alloc(cond));
|
cond = Stmt::Let(symbol, expr, layout, arena.alloc(cond));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1827,7 +1827,9 @@ mod test_mono {
|
||||||
let Test.8 = true;
|
let Test.8 = true;
|
||||||
let Test.10 = 0i64;
|
let Test.10 = 0i64;
|
||||||
let Test.9 = Index 1 Test.2;
|
let Test.9 = Index 1 Test.2;
|
||||||
|
inc Test.9;
|
||||||
let Test.11 = Index 0 Test.9;
|
let Test.11 = Index 0 Test.9;
|
||||||
|
dec Test.9;
|
||||||
let Test.12 = lowlevel Eq Test.10 Test.11;
|
let Test.12 = lowlevel Eq Test.10 Test.11;
|
||||||
let Test.7 = lowlevel And Test.12 Test.8;
|
let Test.7 = lowlevel And Test.12 Test.8;
|
||||||
if Test.7 then
|
if Test.7 then
|
||||||
|
|
|
@ -2,10 +2,11 @@ app Main provides [ main ] imports [ Effect, RBTree ]
|
||||||
|
|
||||||
toAndFro : Int
|
toAndFro : Int
|
||||||
toAndFro =
|
toAndFro =
|
||||||
empty : RBTree.Dict Int Int
|
empty : RBTree.Dict Int {}
|
||||||
empty = RBTree.empty
|
empty = RBTree.empty
|
||||||
|
|
||||||
empty
|
empty
|
||||||
|
|> (\d -> RBTree.insert 1 {} d)
|
||||||
|> RBTree.toList
|
|> RBTree.toList
|
||||||
|> List.len
|
|> List.len
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue