some more fixes involving clauses
This commit is contained in:
parent
a689b8748f
commit
02948616cd
|
@ -727,7 +727,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
let val = AirTree::local_var(name, tipo.clone());
|
let val = AirTree::local_var(name, tipo.clone());
|
||||||
|
|
||||||
if non_opaque_tipo.is_primitive() {
|
if non_opaque_tipo.is_primitive() {
|
||||||
assignment.hoist_over(val)
|
assignment
|
||||||
} else {
|
} else {
|
||||||
let expect = self.expect_type_assign(
|
let expect = self.expect_type_assign(
|
||||||
&non_opaque_tipo,
|
&non_opaque_tipo,
|
||||||
|
@ -1569,7 +1569,20 @@ impl<'a> CodeGenerator<'a> {
|
||||||
props.original_subject_name.clone(),
|
props.original_subject_name.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Some(data_type) = data_type {
|
if matches!(
|
||||||
|
&clause.pattern,
|
||||||
|
Pattern::Var { .. } | Pattern::Discard { .. }
|
||||||
|
) {
|
||||||
|
AirTree::wrap_clause(
|
||||||
|
clause_assign_hoisted,
|
||||||
|
self.handle_each_clause(
|
||||||
|
rest_clauses,
|
||||||
|
final_clause,
|
||||||
|
subject_tipo,
|
||||||
|
&mut next_clause_props,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
} else if let Some(data_type) = data_type {
|
||||||
if data_type.constructors.len() > 1 {
|
if data_type.constructors.len() > 1 {
|
||||||
AirTree::clause(
|
AirTree::clause(
|
||||||
&props.original_subject_name,
|
&props.original_subject_name,
|
||||||
|
@ -1679,7 +1692,8 @@ impl<'a> CodeGenerator<'a> {
|
||||||
|
|
||||||
let next_elements_len = match next_clause_pattern {
|
let next_elements_len = match next_clause_pattern {
|
||||||
Pattern::List { elements, tail, .. } => {
|
Pattern::List { elements, tail, .. } => {
|
||||||
elements.len() + usize::from(tail.is_none())
|
assert!(!elements.is_empty() || tail.is_none());
|
||||||
|
elements.len() + usize::from(tail.is_none()) - 1
|
||||||
}
|
}
|
||||||
_ => 0,
|
_ => 0,
|
||||||
};
|
};
|
||||||
|
@ -1711,7 +1725,8 @@ impl<'a> CodeGenerator<'a> {
|
||||||
is_wild_card_elems_clause =
|
is_wild_card_elems_clause =
|
||||||
is_wild_card_elems_clause && !pattern_has_conditions(element);
|
is_wild_card_elems_clause && !pattern_has_conditions(element);
|
||||||
}
|
}
|
||||||
let elements_len = elements.len() + usize::from(tail.is_none());
|
assert!(!elements.is_empty() || tail.is_none());
|
||||||
|
let elements_len = elements.len() + usize::from(tail.is_none()) - 1;
|
||||||
let current_checked_index = *checked_index;
|
let current_checked_index = *checked_index;
|
||||||
|
|
||||||
if *checked_index < elements_len.try_into().unwrap()
|
if *checked_index < elements_len.try_into().unwrap()
|
||||||
|
|
Loading…
Reference in New Issue