Add recursive_static_params to AIR
Any methods to a recursive function that are unchanged and forwarded don't need to be applied each time we recurse; instead, you can define a containing lambda, reducing the number of applications dramatically when recursing
This commit is contained in:
parent
71a941e0b0
commit
586a2d7972
|
@ -2707,6 +2707,7 @@ impl<'a> CodeGenerator<'a> {
|
|||
variant,
|
||||
func_params.clone(),
|
||||
is_recursive,
|
||||
vec![],
|
||||
body,
|
||||
);
|
||||
|
||||
|
@ -2841,6 +2842,7 @@ impl<'a> CodeGenerator<'a> {
|
|||
&dep_variant,
|
||||
dependent_params,
|
||||
is_dependent_recursive,
|
||||
vec![],
|
||||
dep_air_tree,
|
||||
));
|
||||
|
||||
|
@ -3704,6 +3706,7 @@ impl<'a> CodeGenerator<'a> {
|
|||
func_name,
|
||||
params,
|
||||
recursive,
|
||||
recursive_static_params,
|
||||
module_name,
|
||||
variant_name,
|
||||
} => {
|
||||
|
@ -3733,6 +3736,8 @@ impl<'a> CodeGenerator<'a> {
|
|||
.lambda(func_name)
|
||||
.apply(func_body);
|
||||
|
||||
// TODO: use recursive_static_params here
|
||||
|
||||
arg_stack.push(term);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ pub enum Air {
|
|||
module_name: String,
|
||||
params: Vec<String>,
|
||||
recursive: bool,
|
||||
recursive_static_params: Vec<String>,
|
||||
variant_name: String,
|
||||
},
|
||||
Fn {
|
||||
|
|
|
@ -129,6 +129,7 @@ pub enum AirStatement {
|
|||
module_name: String,
|
||||
params: Vec<String>,
|
||||
recursive: bool,
|
||||
recursive_static_params: Vec<String>,
|
||||
variant_name: String,
|
||||
func_body: Box<AirTree>,
|
||||
},
|
||||
|
@ -423,6 +424,7 @@ impl AirTree {
|
|||
variant_name: impl ToString,
|
||||
params: Vec<String>,
|
||||
recursive: bool,
|
||||
recursive_static_params: Vec<String>,
|
||||
func_body: AirTree,
|
||||
) -> AirTree {
|
||||
AirTree::Statement {
|
||||
|
@ -431,6 +433,7 @@ impl AirTree {
|
|||
module_name: module_name.to_string(),
|
||||
params,
|
||||
recursive,
|
||||
recursive_static_params,
|
||||
variant_name: variant_name.to_string(),
|
||||
func_body: func_body.into(),
|
||||
},
|
||||
|
@ -875,6 +878,7 @@ impl AirTree {
|
|||
module_name,
|
||||
params,
|
||||
recursive,
|
||||
recursive_static_params,
|
||||
variant_name,
|
||||
func_body,
|
||||
} => {
|
||||
|
@ -883,6 +887,7 @@ impl AirTree {
|
|||
module_name: module_name.clone(),
|
||||
params: params.clone(),
|
||||
recursive: *recursive,
|
||||
recursive_static_params: recursive_static_params.clone(),
|
||||
variant_name: variant_name.clone(),
|
||||
});
|
||||
func_body.create_air_vec(air_vec);
|
||||
|
|
Loading…
Reference in New Issue