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,
|
variant,
|
||||||
func_params.clone(),
|
func_params.clone(),
|
||||||
is_recursive,
|
is_recursive,
|
||||||
|
vec![],
|
||||||
body,
|
body,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -2841,6 +2842,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
&dep_variant,
|
&dep_variant,
|
||||||
dependent_params,
|
dependent_params,
|
||||||
is_dependent_recursive,
|
is_dependent_recursive,
|
||||||
|
vec![],
|
||||||
dep_air_tree,
|
dep_air_tree,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -3704,6 +3706,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
func_name,
|
func_name,
|
||||||
params,
|
params,
|
||||||
recursive,
|
recursive,
|
||||||
|
recursive_static_params,
|
||||||
module_name,
|
module_name,
|
||||||
variant_name,
|
variant_name,
|
||||||
} => {
|
} => {
|
||||||
|
@ -3733,6 +3736,8 @@ impl<'a> CodeGenerator<'a> {
|
||||||
.lambda(func_name)
|
.lambda(func_name)
|
||||||
.apply(func_body);
|
.apply(func_body);
|
||||||
|
|
||||||
|
// TODO: use recursive_static_params here
|
||||||
|
|
||||||
arg_stack.push(term);
|
arg_stack.push(term);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ pub enum Air {
|
||||||
module_name: String,
|
module_name: String,
|
||||||
params: Vec<String>,
|
params: Vec<String>,
|
||||||
recursive: bool,
|
recursive: bool,
|
||||||
|
recursive_static_params: Vec<String>,
|
||||||
variant_name: String,
|
variant_name: String,
|
||||||
},
|
},
|
||||||
Fn {
|
Fn {
|
||||||
|
|
|
@ -129,6 +129,7 @@ pub enum AirStatement {
|
||||||
module_name: String,
|
module_name: String,
|
||||||
params: Vec<String>,
|
params: Vec<String>,
|
||||||
recursive: bool,
|
recursive: bool,
|
||||||
|
recursive_static_params: Vec<String>,
|
||||||
variant_name: String,
|
variant_name: String,
|
||||||
func_body: Box<AirTree>,
|
func_body: Box<AirTree>,
|
||||||
},
|
},
|
||||||
|
@ -423,6 +424,7 @@ impl AirTree {
|
||||||
variant_name: impl ToString,
|
variant_name: impl ToString,
|
||||||
params: Vec<String>,
|
params: Vec<String>,
|
||||||
recursive: bool,
|
recursive: bool,
|
||||||
|
recursive_static_params: Vec<String>,
|
||||||
func_body: AirTree,
|
func_body: AirTree,
|
||||||
) -> AirTree {
|
) -> AirTree {
|
||||||
AirTree::Statement {
|
AirTree::Statement {
|
||||||
|
@ -431,6 +433,7 @@ impl AirTree {
|
||||||
module_name: module_name.to_string(),
|
module_name: module_name.to_string(),
|
||||||
params,
|
params,
|
||||||
recursive,
|
recursive,
|
||||||
|
recursive_static_params,
|
||||||
variant_name: variant_name.to_string(),
|
variant_name: variant_name.to_string(),
|
||||||
func_body: func_body.into(),
|
func_body: func_body.into(),
|
||||||
},
|
},
|
||||||
|
@ -875,6 +878,7 @@ impl AirTree {
|
||||||
module_name,
|
module_name,
|
||||||
params,
|
params,
|
||||||
recursive,
|
recursive,
|
||||||
|
recursive_static_params,
|
||||||
variant_name,
|
variant_name,
|
||||||
func_body,
|
func_body,
|
||||||
} => {
|
} => {
|
||||||
|
@ -883,6 +887,7 @@ impl AirTree {
|
||||||
module_name: module_name.clone(),
|
module_name: module_name.clone(),
|
||||||
params: params.clone(),
|
params: params.clone(),
|
||||||
recursive: *recursive,
|
recursive: *recursive,
|
||||||
|
recursive_static_params: recursive_static_params.clone(),
|
||||||
variant_name: variant_name.clone(),
|
variant_name: variant_name.clone(),
|
||||||
});
|
});
|
||||||
func_body.create_air_vec(air_vec);
|
func_body.create_air_vec(air_vec);
|
||||||
|
|
Loading…
Reference in New Issue