fix first compiler pass of errors

This commit is contained in:
microproofs 2024-02-03 17:17:25 -05:00 committed by Kasey
parent dc195b22d4
commit b807d58e89
1 changed files with 58 additions and 56 deletions

View File

@ -2506,7 +2506,7 @@ impl<'a> CodeGenerator<'a> {
} }
}); });
let tuple_name_assigns = previous_defined_names.into_iter().rfold( let tuple_name_assigns = previous_defined_names.into_iter().rev().fold(
next_then, next_then,
|inner_then, (index, prev_name, name)| { |inner_then, (index, prev_name, name)| {
AirTree::let_assignment( AirTree::let_assignment(
@ -2743,69 +2743,71 @@ impl<'a> CodeGenerator<'a> {
) -> AirTree { ) -> AirTree {
let mut arg_names = vec![]; let mut arg_names = vec![];
let checked_args = arguments let checked_args =
.iter() arguments
.enumerate() .iter()
.rfold(body, |inner_then, (index, arg)| { .enumerate()
let arg_name = arg.arg_name.get_variable_name().unwrap_or("_").to_string(); .rev()
let arg_span = arg.location; .fold(body, |inner_then, (index, arg)| {
let arg_name = arg.arg_name.get_variable_name().unwrap_or("_").to_string();
let arg_span = arg.location;
arg_names.push(arg_name.clone()); arg_names.push(arg_name.clone());
if !(has_context && index == arguments.len() - 1) && &arg_name != "_" { if !(has_context && index == arguments.len() - 1) && &arg_name != "_" {
let param = AirTree::local_var(&arg_name, data()); let param = AirTree::local_var(&arg_name, data());
let actual_type = convert_opaque_type(&arg.tipo, &self.data_types); let actual_type = convert_opaque_type(&arg.tipo, &self.data_types);
let msg_func = match self.tracing { let msg_func = match self.tracing {
TraceLevel::Silent => None, TraceLevel::Silent => None,
TraceLevel::Compact | TraceLevel::Verbose => { TraceLevel::Compact | TraceLevel::Verbose => {
let msg = match self.tracing { let msg = match self.tracing {
TraceLevel::Silent => { TraceLevel::Silent => {
unreachable!("excluded from pattern guards") unreachable!("excluded from pattern guards")
} }
TraceLevel::Compact => lines TraceLevel::Compact => lines
.line_and_column_number(arg_span.start) .line_and_column_number(arg_span.start)
.expect("Out of bounds span") .expect("Out of bounds span")
.to_string(), .to_string(),
TraceLevel::Verbose => src_code TraceLevel::Verbose => src_code
.get(arg_span.start..arg_span.end) .get(arg_span.start..arg_span.end)
.expect("Out of bounds span") .expect("Out of bounds span")
.to_string(), .to_string(),
}; };
let msg_func_name = msg.split_whitespace().join(""); let msg_func_name = msg.split_whitespace().join("");
self.special_functions.insert_new_function( self.special_functions.insert_new_function(
msg_func_name.to_string(), msg_func_name.to_string(),
Term::string(msg), Term::string(msg),
string(), string(),
); );
Some(self.special_functions.use_function_msg(msg_func_name)) Some(self.special_functions.use_function_msg(msg_func_name))
} }
}; };
self.assignment( self.assignment(
&Pattern::Var { &Pattern::Var {
location: Span::empty(), location: Span::empty(),
name: arg_name.to_string(), name: arg_name.to_string(),
}, },
param, param,
inner_then, inner_then,
&actual_type, &actual_type,
AssignmentProperties { AssignmentProperties {
value_type: data(), value_type: data(),
kind: AssignmentKind::Expect, kind: AssignmentKind::Expect,
remove_unused: false, remove_unused: false,
full_check: true, full_check: true,
msg_func, msg_func,
}, },
) )
} else { } else {
inner_then inner_then
} }
}); });
arg_names.reverse(); arg_names.reverse();