continue progress on pair adding

This commit is contained in:
microproofs 2024-03-25 11:51:41 -04:00 committed by Kasey
parent 21b60896f0
commit 963d275bb8
1 changed files with 31 additions and 1 deletions

View File

@ -1099,13 +1099,19 @@ impl<'a> CodeGenerator<'a> {
} else if tipo.is_void() {
AirTree::let_assignment("_", value, then)
} else {
// Constr and Pair execution branch
let field_map = field_map.clone();
let mut type_map: IndexMap<usize, Rc<Type>> = IndexMap::new();
for (index, arg) in constr_tipo
.arg_types()
.expect("Mismatched type")
.unwrap_or_else(|| {
// TODO refactor out pair from constr branch later
assert!(constr_tipo.is_pair());
constr_tipo.get_inner_types()
})
.iter()
.enumerate()
{
@ -1195,6 +1201,29 @@ impl<'a> CodeGenerator<'a> {
let then = if check_replaceable_opaque_type(tipo, &self.data_types) {
AirTree::let_assignment(&fields[0].1, local_value, then)
} else if tipo.is_pair() {
let (is_expect, msg) = if props.full_check {
(true, props.msg_func.clone())
} else {
(false, None)
};
assert!(fields.len() == 2);
AirTree::pair_access(
fields
.first()
.map(|x| if x.1 == "_" { None } else { Some(x.1.clone()) })
.unwrap(),
fields
.last()
.map(|x| if x.1 == "_" { None } else { Some(x.1.clone()) })
.unwrap(),
tipo.clone(),
local_value,
msg,
is_expect,
then,
)
} else {
let (is_expect, msg) = if props.full_check {
(true, props.msg_func.clone())
@ -2102,6 +2131,7 @@ impl<'a> CodeGenerator<'a> {
)
}
}
SpecificClause::PairClause => todo!(),
}
} else {
// handle final_clause