mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 22:34:45 +00:00
convert enum tag unions to mono
This commit is contained in:
parent
9081b7f2d1
commit
2bad39e8b9
3 changed files with 124 additions and 9 deletions
|
@ -353,6 +353,25 @@ fn from_can<'a>(
|
|||
elems: elems.into_bump_slice(),
|
||||
}
|
||||
}
|
||||
|
||||
Tag {
|
||||
variant_var,
|
||||
ext_var,
|
||||
name,
|
||||
arguments,
|
||||
} => {
|
||||
let subs = &env.subs;
|
||||
let arena = env.arena;
|
||||
|
||||
match Layout::from_var(arena, variant_var, subs) {
|
||||
Ok(Layout::Builtin(Builtin::Bool(_smaller, larger))) => Expr::Bool(name == larger),
|
||||
Ok(Layout::Builtin(Builtin::Byte(tags))) => match tags.get(&name) {
|
||||
Some(v) => Expr::Byte(*v),
|
||||
None => panic!("Tag name is not part of the type"),
|
||||
},
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
other => panic!("TODO convert canonicalized {:?} to ll::Expr", other),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue