#[derive(Debug, Clone)]
pub struct InlineConfig {
pub inline_single_use: bool,
pub inline_constants: bool,
pub inline_vars: bool,
pub max_passes: u32,
pub max_inline_depth: usize,
}
impl Default for InlineConfig {
fn default() -> Self {
Self {
inline_single_use: true,
inline_constants: true,
inline_vars: true,
max_passes: 20,
max_inline_depth: 10,
}
}
}
#[derive(Debug, Clone, Default)]
pub struct InlineStats {
pub single_use_inlines: u64,
pub constant_inlines: u64,
pub variable_inlines: u64,
pub nodes_before: u64,
pub nodes_after: u64,
pub passes: u32,
}
impl InlineStats {
pub fn total(&self) -> u64 {
self.single_use_inlines
.saturating_add(self.constant_inlines)
.saturating_add(self.variable_inlines)
}
pub fn reduction_pct(&self) -> f64 {
if self.nodes_before == 0 {
return 0.0;
}
let before = self.nodes_before as f64;
let after = self.nodes_after as f64;
((before - after) / before * 100.0).max(0.0)
}
pub fn summary(&self) -> String {
format!(
"Inline: {} passes, {}/{} nodes kept ({:.1}% reduction) — \
{} single-use, {} constant, {} variable-alias inlines",
self.passes,
self.nodes_after,
self.nodes_before,
self.reduction_pct(),
self.single_use_inlines,
self.constant_inlines,
self.variable_inlines,
)
}
}