Skip to main content

simplify

Function simplify 

Source
pub fn simplify<L: Lang>(
    lang: &mut L,
    root: L::Id,
    rules: &[Box<dyn Rule<L>>],
    cfg: &Config,
) -> Report
Expand description

对 root(通常是方法体 Block)运行规则集直到 fixed point。

终止性:每条被应用的编辑都严格降低总成本(Edit::cost_reduction 校验), 成本单调下降 + 非负 ⇒ 必然终止;max_edits 只是防御性保险丝。

同 pass 批量应用(正确性论证见 rule.rs 尾部注释):

  • 纯 Replace 立即应用(原位换孩子不移动兄弟下标,快照索引全程有效), 并沿祖先链失效效果缓存后继续本 pass 扫描;
  • 含 Delete/Splice 的结构编辑记录足迹与 Splice 区间快照,pass 末按 (parent, 位置) 降序校验应用,校验失配(树不再符合提案假设)→ 丢弃, 下一 pass 重新提案——丢弃不降成本,单调性不受影响;
  • 足迹(含子树)进 touched 集:已承诺区域不再扫描、不再被新提案触碰。