fix: module_name was being overrided by the moduleselect field
This commit is contained in:
parent
3a534271e7
commit
a83220c8d9
|
@ -236,7 +236,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
program
|
program
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build(&mut self, body: &TypedExpr, module_name: &String) -> AirTree {
|
fn build(&mut self, body: &TypedExpr, module_build_name: &String) -> AirTree {
|
||||||
match body {
|
match body {
|
||||||
TypedExpr::UInt { value, .. } => AirTree::int(value),
|
TypedExpr::UInt { value, .. } => AirTree::int(value),
|
||||||
TypedExpr::String { value, .. } => AirTree::string(value),
|
TypedExpr::String { value, .. } => AirTree::string(value),
|
||||||
|
@ -251,11 +251,11 @@ impl<'a> CodeGenerator<'a> {
|
||||||
|
|
||||||
let mut last_exp = self.build(
|
let mut last_exp = self.build(
|
||||||
&expressions.pop().unwrap_or_else(|| unreachable!()),
|
&expressions.pop().unwrap_or_else(|| unreachable!()),
|
||||||
module_name,
|
module_build_name,
|
||||||
);
|
);
|
||||||
|
|
||||||
while let Some(expression) = expressions.pop() {
|
while let Some(expression) = expressions.pop() {
|
||||||
let exp_tree = self.build(&expression, module_name);
|
let exp_tree = self.build(&expression, module_build_name);
|
||||||
|
|
||||||
last_exp = exp_tree.hoist_over(last_exp);
|
last_exp = exp_tree.hoist_over(last_exp);
|
||||||
}
|
}
|
||||||
|
@ -273,7 +273,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
args.iter()
|
args.iter()
|
||||||
.map(|arg| arg.arg_name.get_variable_name().unwrap_or("_").to_string())
|
.map(|arg| arg.arg_name.get_variable_name().unwrap_or("_").to_string())
|
||||||
.collect_vec(),
|
.collect_vec(),
|
||||||
self.build(body, module_name),
|
self.build(body, module_build_name),
|
||||||
),
|
),
|
||||||
|
|
||||||
TypedExpr::List {
|
TypedExpr::List {
|
||||||
|
@ -284,10 +284,11 @@ impl<'a> CodeGenerator<'a> {
|
||||||
} => AirTree::list(
|
} => AirTree::list(
|
||||||
elements
|
elements
|
||||||
.iter()
|
.iter()
|
||||||
.map(|elem| self.build(elem, module_name))
|
.map(|elem| self.build(elem, module_build_name))
|
||||||
.collect_vec(),
|
.collect_vec(),
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
tail.as_ref().map(|tail| self.build(tail, module_name)),
|
tail.as_ref()
|
||||||
|
.map(|tail| self.build(tail, module_build_name)),
|
||||||
),
|
),
|
||||||
|
|
||||||
TypedExpr::Call {
|
TypedExpr::Call {
|
||||||
|
@ -330,11 +331,11 @@ impl<'a> CodeGenerator<'a> {
|
||||||
.map(|(arg, tipo)| {
|
.map(|(arg, tipo)| {
|
||||||
if tipo.is_data() {
|
if tipo.is_data() {
|
||||||
AirTree::cast_to_data(
|
AirTree::cast_to_data(
|
||||||
self.build(&arg.value, module_name),
|
self.build(&arg.value, module_build_name),
|
||||||
arg.value.tipo(),
|
arg.value.tipo(),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
self.build(&arg.value, module_name)
|
self.build(&arg.value, module_build_name)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect_vec();
|
.collect_vec();
|
||||||
|
@ -361,7 +362,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
.iter()
|
.iter()
|
||||||
.zip(fun_arg_types)
|
.zip(fun_arg_types)
|
||||||
.map(|(arg, arg_tipo)| {
|
.map(|(arg, arg_tipo)| {
|
||||||
let mut arg_val = self.build(&arg.value, module_name);
|
let mut arg_val = self.build(&arg.value, module_build_name);
|
||||||
|
|
||||||
if arg_tipo.is_data() && !arg.value.tipo().is_data() {
|
if arg_tipo.is_data() && !arg.value.tipo().is_data() {
|
||||||
arg_val = AirTree::cast_to_data(arg_val, arg.value.tipo())
|
arg_val = AirTree::cast_to_data(arg_val, arg.value.tipo())
|
||||||
|
@ -374,7 +375,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
AirTree::builtin(*func, tipo.clone(), func_args)
|
AirTree::builtin(*func, tipo.clone(), func_args)
|
||||||
} else {
|
} else {
|
||||||
AirTree::call(
|
AirTree::call(
|
||||||
self.build(fun.as_ref(), module_name),
|
self.build(fun.as_ref(), module_build_name),
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
func_args,
|
func_args,
|
||||||
)
|
)
|
||||||
|
@ -404,7 +405,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
.iter()
|
.iter()
|
||||||
.zip(fun_arg_types)
|
.zip(fun_arg_types)
|
||||||
.map(|(arg, arg_tipo)| {
|
.map(|(arg, arg_tipo)| {
|
||||||
let mut arg_val = self.build(&arg.value, module_name);
|
let mut arg_val = self.build(&arg.value, module_build_name);
|
||||||
|
|
||||||
if arg_tipo.is_data() && !arg.value.tipo().is_data() {
|
if arg_tipo.is_data() && !arg.value.tipo().is_data() {
|
||||||
arg_val = AirTree::cast_to_data(arg_val, arg.value.tipo())
|
arg_val = AirTree::cast_to_data(arg_val, arg.value.tipo())
|
||||||
|
@ -417,7 +418,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
AirTree::builtin(*func, tipo.clone(), func_args)
|
AirTree::builtin(*func, tipo.clone(), func_args)
|
||||||
} else {
|
} else {
|
||||||
AirTree::call(
|
AirTree::call(
|
||||||
self.build(fun.as_ref(), module_name),
|
self.build(fun.as_ref(), module_build_name),
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
func_args,
|
func_args,
|
||||||
)
|
)
|
||||||
|
@ -435,7 +436,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
.iter()
|
.iter()
|
||||||
.zip(fun_arg_types)
|
.zip(fun_arg_types)
|
||||||
.map(|(arg, arg_tipo)| {
|
.map(|(arg, arg_tipo)| {
|
||||||
let mut arg_val = self.build(&arg.value, module_name);
|
let mut arg_val = self.build(&arg.value, module_build_name);
|
||||||
|
|
||||||
if arg_tipo.is_data() && !arg.value.tipo().is_data() {
|
if arg_tipo.is_data() && !arg.value.tipo().is_data() {
|
||||||
arg_val = AirTree::cast_to_data(arg_val, arg.value.tipo())
|
arg_val = AirTree::cast_to_data(arg_val, arg.value.tipo())
|
||||||
|
@ -445,7 +446,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
.collect_vec();
|
.collect_vec();
|
||||||
|
|
||||||
AirTree::call(
|
AirTree::call(
|
||||||
self.build(fun.as_ref(), module_name),
|
self.build(fun.as_ref(), module_build_name),
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
func_args,
|
func_args,
|
||||||
)
|
)
|
||||||
|
@ -460,8 +461,8 @@ impl<'a> CodeGenerator<'a> {
|
||||||
} => AirTree::binop(
|
} => AirTree::binop(
|
||||||
*name,
|
*name,
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
self.build(left, module_name),
|
self.build(left, module_build_name),
|
||||||
self.build(right, module_name),
|
self.build(right, module_build_name),
|
||||||
left.tipo(),
|
left.tipo(),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
@ -475,7 +476,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
} => {
|
} => {
|
||||||
let replaced_type = convert_opaque_type(tipo, &self.data_types);
|
let replaced_type = convert_opaque_type(tipo, &self.data_types);
|
||||||
|
|
||||||
let air_value = self.build(value, module_name);
|
let air_value = self.build(value, module_build_name);
|
||||||
|
|
||||||
let msg_func = match self.tracing {
|
let msg_func = match self.tracing {
|
||||||
TraceLevel::Silent => None,
|
TraceLevel::Silent => None,
|
||||||
|
@ -484,14 +485,16 @@ impl<'a> CodeGenerator<'a> {
|
||||||
let msg = match self.tracing {
|
let msg = match self.tracing {
|
||||||
TraceLevel::Silent => unreachable!("excluded from pattern guards"),
|
TraceLevel::Silent => unreachable!("excluded from pattern guards"),
|
||||||
TraceLevel::Compact => get_line_columns_by_span(
|
TraceLevel::Compact => get_line_columns_by_span(
|
||||||
module_name,
|
module_build_name,
|
||||||
location,
|
location,
|
||||||
&self.module_src,
|
&self.module_src,
|
||||||
)
|
)
|
||||||
.to_string(),
|
.to_string(),
|
||||||
TraceLevel::Verbose => {
|
TraceLevel::Verbose => get_src_code_by_span(
|
||||||
get_src_code_by_span(module_name, location, &self.module_src)
|
module_build_name,
|
||||||
}
|
location,
|
||||||
|
&self.module_src,
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
let msg_func_name = msg.split_whitespace().join("");
|
let msg_func_name = msg.split_whitespace().join("");
|
||||||
|
@ -526,9 +529,9 @@ impl<'a> CodeGenerator<'a> {
|
||||||
TypedExpr::Trace {
|
TypedExpr::Trace {
|
||||||
tipo, then, text, ..
|
tipo, then, text, ..
|
||||||
} => AirTree::trace(
|
} => AirTree::trace(
|
||||||
self.build(text, module_name),
|
self.build(text, module_build_name),
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
self.build(then, module_name),
|
self.build(then, module_build_name),
|
||||||
),
|
),
|
||||||
|
|
||||||
TypedExpr::When {
|
TypedExpr::When {
|
||||||
|
@ -544,11 +547,11 @@ impl<'a> CodeGenerator<'a> {
|
||||||
} else if clauses.len() == 1 {
|
} else if clauses.len() == 1 {
|
||||||
let last_clause = clauses.pop().unwrap();
|
let last_clause = clauses.pop().unwrap();
|
||||||
|
|
||||||
let clause_then = self.build(&last_clause.then, module_name);
|
let clause_then = self.build(&last_clause.then, module_build_name);
|
||||||
|
|
||||||
let subject_type = subject.tipo();
|
let subject_type = subject.tipo();
|
||||||
|
|
||||||
let subject_val = self.build(subject, module_name);
|
let subject_val = self.build(subject, module_build_name);
|
||||||
|
|
||||||
let assignment = self.assignment(
|
let assignment = self.assignment(
|
||||||
&last_clause.pattern,
|
&last_clause.pattern,
|
||||||
|
@ -594,11 +597,13 @@ impl<'a> CodeGenerator<'a> {
|
||||||
constr_var.clone(),
|
constr_var.clone(),
|
||||||
subject_name.clone(),
|
subject_name.clone(),
|
||||||
),
|
),
|
||||||
module_name,
|
module_build_name,
|
||||||
);
|
);
|
||||||
|
|
||||||
let constr_assign =
|
let constr_assign = AirTree::let_assignment(
|
||||||
AirTree::let_assignment(&constr_var, self.build(subject, module_name));
|
&constr_var,
|
||||||
|
self.build(subject, module_build_name),
|
||||||
|
);
|
||||||
|
|
||||||
let when_assign = AirTree::when(
|
let when_assign = AirTree::when(
|
||||||
subject_name,
|
subject_name,
|
||||||
|
@ -622,13 +627,13 @@ impl<'a> CodeGenerator<'a> {
|
||||||
.iter()
|
.iter()
|
||||||
.map(|branch| {
|
.map(|branch| {
|
||||||
(
|
(
|
||||||
self.build(&branch.condition, module_name),
|
self.build(&branch.condition, module_build_name),
|
||||||
self.build(&branch.body, module_name),
|
self.build(&branch.body, module_build_name),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.collect_vec(),
|
.collect_vec(),
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
self.build(final_else, module_name),
|
self.build(final_else, module_build_name),
|
||||||
),
|
),
|
||||||
|
|
||||||
TypedExpr::RecordAccess {
|
TypedExpr::RecordAccess {
|
||||||
|
@ -638,7 +643,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
..
|
..
|
||||||
} => {
|
} => {
|
||||||
if check_replaceable_opaque_type(&record.tipo(), &self.data_types) {
|
if check_replaceable_opaque_type(&record.tipo(), &self.data_types) {
|
||||||
self.build(record, module_name)
|
self.build(record, module_build_name)
|
||||||
} else {
|
} else {
|
||||||
let function_name = format!("__access_index_{}", *index);
|
let function_name = format!("__access_index_{}", *index);
|
||||||
|
|
||||||
|
@ -668,7 +673,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
self.special_functions
|
self.special_functions
|
||||||
.use_function_tree(CONSTR_FIELDS_EXPOSER.to_string()),
|
.use_function_tree(CONSTR_FIELDS_EXPOSER.to_string()),
|
||||||
list(data()),
|
list(data()),
|
||||||
vec![self.build(record, module_name)],
|
vec![self.build(record, module_build_name)],
|
||||||
);
|
);
|
||||||
|
|
||||||
AirTree::index_access(function_name, tipo.clone(), list_of_fields)
|
AirTree::index_access(function_name, tipo.clone(), list_of_fields)
|
||||||
|
@ -741,7 +746,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
TypedExpr::Tuple { tipo, elems, .. } => AirTree::tuple(
|
TypedExpr::Tuple { tipo, elems, .. } => AirTree::tuple(
|
||||||
elems
|
elems
|
||||||
.iter()
|
.iter()
|
||||||
.map(|elem| self.build(elem, module_name))
|
.map(|elem| self.build(elem, module_build_name))
|
||||||
.collect_vec(),
|
.collect_vec(),
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
),
|
),
|
||||||
|
@ -750,7 +755,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
index, tuple, tipo, ..
|
index, tuple, tipo, ..
|
||||||
} => {
|
} => {
|
||||||
if tuple.tipo().is_2_tuple() {
|
if tuple.tipo().is_2_tuple() {
|
||||||
AirTree::pair_index(*index, tipo.clone(), self.build(tuple, module_name))
|
AirTree::pair_index(*index, tipo.clone(), self.build(tuple, module_build_name))
|
||||||
} else {
|
} else {
|
||||||
let function_name = format!("__access_index_{}", *index);
|
let function_name = format!("__access_index_{}", *index);
|
||||||
|
|
||||||
|
@ -779,7 +784,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
AirTree::index_access(
|
AirTree::index_access(
|
||||||
function_name,
|
function_name,
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
self.build(tuple, module_name),
|
self.build(tuple, module_build_name),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -798,7 +803,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
.iter()
|
.iter()
|
||||||
.sorted_by(|arg1, arg2| arg1.index.cmp(&arg2.index))
|
.sorted_by(|arg1, arg2| arg1.index.cmp(&arg2.index))
|
||||||
{
|
{
|
||||||
let arg_val = self.build(&arg.value, module_name);
|
let arg_val = self.build(&arg.value, module_build_name);
|
||||||
|
|
||||||
if arg.index > highest_index {
|
if arg.index > highest_index {
|
||||||
highest_index = arg.index;
|
highest_index = arg.index;
|
||||||
|
@ -812,12 +817,14 @@ impl<'a> CodeGenerator<'a> {
|
||||||
index_types,
|
index_types,
|
||||||
highest_index,
|
highest_index,
|
||||||
tipo.clone(),
|
tipo.clone(),
|
||||||
self.build(spread, module_name),
|
self.build(spread, module_build_name),
|
||||||
update_args,
|
update_args,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
TypedExpr::UnOp { value, op, .. } => AirTree::unop(*op, self.build(value, module_name)),
|
TypedExpr::UnOp { value, op, .. } => {
|
||||||
|
AirTree::unop(*op, self.build(value, module_build_name))
|
||||||
|
}
|
||||||
TypedExpr::CurvePoint { point, .. } => AirTree::curve(*point.as_ref()),
|
TypedExpr::CurvePoint { point, .. } => AirTree::curve(*point.as_ref()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue