mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 23:31:12 +00:00
walk the chain till we find a tag union to make recursive
This commit is contained in:
parent
4c62e335e5
commit
2c97c840fc
2 changed files with 58 additions and 1 deletions
|
@ -833,10 +833,21 @@ enum OtherTags2 {
|
|||
}
|
||||
|
||||
fn maybe_mark_tag_union_recursive(subs: &mut Subs, tag_union_var: Variable) {
|
||||
while let Err((recursive, _chain)) = subs.occurs(tag_union_var) {
|
||||
'outer: while let Err((recursive, chain)) = subs.occurs(tag_union_var) {
|
||||
let description = subs.get(recursive);
|
||||
if let Content::Structure(FlatType::TagUnion(tags, ext_var)) = description.content {
|
||||
subs.mark_tag_union_recursive(recursive, tags, ext_var);
|
||||
} else {
|
||||
// walk the chain till we find a tag union
|
||||
for v in &chain[..chain.len() - 1] {
|
||||
let description = subs.get(*v);
|
||||
if let Content::Structure(FlatType::TagUnion(tags, ext_var)) = description.content {
|
||||
subs.mark_tag_union_recursive(*v, tags, ext_var);
|
||||
continue 'outer;
|
||||
}
|
||||
}
|
||||
|
||||
panic!("recursive loop does not contain a tag union")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue