some more fixes
This commit is contained in:
parent
58b327e5b3
commit
52ebc9b6c1
|
@ -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());
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue