cad0c03973
Introduces the `Inliner` struct to encapsulate logic related to value and function inlining. This improves code organization and readability within the optimizer engine. Key changes include: - Moving `is_inlinable_value` to the `Inliner` struct. - Extracting beta-reduction preparation logic into `Inliner::prepare_beta_reduction`. - Moving parameter slot collection to `Inliner::collect_parameter_slots`. - Introducing `flatten_tuple` to a new `utils` module, used by both `Folder` and `Inliner`.
19 lines
529 B
Rust
19 lines
529 B
Rust
use crate::ast::compiler::bound_nodes::{AnalyzedNode, BoundKind};
|
|
|
|
pub fn flatten_tuple(node: AnalyzedNode, into: &mut Vec<AnalyzedNode>) {
|
|
match node.kind {
|
|
BoundKind::Tuple { elements } => {
|
|
for el in elements {
|
|
flatten_tuple(el, into);
|
|
}
|
|
}
|
|
BoundKind::Record { fields } => {
|
|
for (_, v) in fields {
|
|
flatten_tuple(v, into);
|
|
}
|
|
}
|
|
BoundKind::Nop => {}
|
|
_ => into.push(node),
|
|
}
|
|
}
|