some more fixes

This commit is contained in:
microproofs 2023-07-26 17:40:39 -04:00 committed by Kasey
parent 58b327e5b3
commit 52ebc9b6c1
2 changed files with 25 additions and 32 deletions

View File

@ -174,6 +174,7 @@ impl<'a> CodeGenerator<'a> {
// optimizations on air tree // optimizations on air tree
let full_vec = full_tree.to_vec(); let full_vec = full_tree.to_vec();
// println!("FULL VEC {:#?}", full_vec);
let term = self.uplc_code_gen(full_vec); let term = self.uplc_code_gen(full_vec);
@ -194,8 +195,8 @@ impl<'a> CodeGenerator<'a> {
term, term,
}; };
program = aiken_optimize_and_intern(program);
// println!("PROGRAM {}", program.to_pretty()); // println!("PROGRAM {}", program.to_pretty());
program = aiken_optimize_and_intern(program);
// This is very important to call here. // This is very important to call here.
// If this isn't done, re-using the same instance // If this isn't done, re-using the same instance
@ -1586,7 +1587,7 @@ impl<'a> CodeGenerator<'a> {
); );
}; };
let tail_name = if *current_index == 0 { let mut tail_name = if *current_index == 0 {
props.original_subject_name.clone() props.original_subject_name.clone()
} else { } else {
format!( format!(
@ -1620,15 +1621,16 @@ impl<'a> CodeGenerator<'a> {
} }
}; };
let mut use_wrap_clause = false;
if elements.len() - usize::from(tail.is_some() && !elements.is_empty()) if elements.len() - usize::from(tail.is_some() && !elements.is_empty())
>= *current_index as usize >= *current_index as usize
{ {
*current_index += 1; *current_index += 1;
defined_tails.push(tail_name.clone()); defined_tails.push(tail_name.clone());
} else if next_tail_name.is_none() { } else if next_tail_name.is_none() {
use_wrap_clause = true; tail_name = defined_tails
.last()
.cloned()
.unwrap_or(props.original_subject_name.clone());
} }
let mut next_clause_props = ClauseProperties { let mut next_clause_props = ClauseProperties {
@ -1650,17 +1652,6 @@ impl<'a> CodeGenerator<'a> {
let complex_clause = props.complex_clause; let complex_clause = props.complex_clause;
if use_wrap_clause {
AirTree::wrap_clause(
clause_assign_hoisted,
self.handle_each_clause(
rest_clauses,
final_clause,
subject_tipo,
&mut next_clause_props,
),
)
} else {
AirTree::list_clause( AirTree::list_clause(
tail_name, tail_name,
subject_tipo.clone(), subject_tipo.clone(),
@ -1675,7 +1666,6 @@ impl<'a> CodeGenerator<'a> {
complex_clause, complex_clause,
) )
} }
}
SpecificClause::TupleClause { SpecificClause::TupleClause {
defined_tuple_indices, defined_tuple_indices,
} => { } => {
@ -2197,6 +2187,8 @@ impl<'a> CodeGenerator<'a> {
} = props } = props
else { unreachable!() }; else { unreachable!() };
defined_tails.push(props.original_subject_name.clone());
for (index, _) in elements.iter().enumerate() { for (index, _) in elements.iter().enumerate() {
let prev_tail_name = if index == 0 { let prev_tail_name = if index == 0 {
props.original_subject_name.clone() props.original_subject_name.clone()
@ -2243,6 +2235,7 @@ impl<'a> CodeGenerator<'a> {
defined_tails.push(tail_name); defined_tails.push(tail_name);
}; };
} }
let (_, assigns) = self.clause_pattern(pattern, subject_tipo, props); let (_, assigns) = self.clause_pattern(pattern, subject_tipo, props);
clause_assigns.push(assigns); clause_assigns.push(assigns);
AirTree::UnhoistedSequence(clause_assigns) AirTree::UnhoistedSequence(clause_assigns)
@ -3738,8 +3731,8 @@ impl<'a> CodeGenerator<'a> {
} }
Air::WrapClause => { Air::WrapClause => {
// no longer need to pop off discard // no longer need to pop off discard
let arg = arg_stack.pop().unwrap();
let mut term = arg_stack.pop().unwrap(); let mut term = arg_stack.pop().unwrap();
let arg = arg_stack.pop().unwrap();
term = term.lambda("__other_clauses_delayed").apply(arg.delay()); term = term.lambda("__other_clauses_delayed").apply(arg.delay());

View File

@ -545,7 +545,7 @@ pub fn erase_opaque_type_operations(
*air_tree = args.pop().unwrap(); *air_tree = args.pop().unwrap();
} }
} }
AirExpression::RecordAccess { tipo, record, .. } => { AirExpression::RecordAccess { record, .. } => {
if check_replaceable_opaque_type(&record.return_type(), data_types) { if check_replaceable_opaque_type(&record.return_type(), data_types) {
*air_tree = (**record).clone(); *air_tree = (**record).clone();
} }