fn optimize_on_freeze()

in starlark/src/eval/fragment/stmt.rs [112:158]


    fn optimize_on_freeze(&self, ctx: &OptimizeOnFreezeContext) -> StmtsCompiled {
        let span = self.span;
        match self.node {
            StmtCompiled::Return(ref e) => StmtsCompiled::one(IrSpanned {
                span,
                node: StmtCompiled::Return(e.optimize_on_freeze(ctx)),
            }),
            StmtCompiled::Expr(ref expr) => {
                let expr = expr.optimize_on_freeze(ctx);
                StmtsCompiled::expr(expr)
            }
            StmtCompiled::Assign(ref lhs, ref rhs) => {
                let lhs = lhs.optimize_on_freeze(ctx);
                let rhs = rhs.optimize_on_freeze(ctx);
                StmtsCompiled::one(IrSpanned {
                    span,
                    node: StmtCompiled::Assign(lhs, rhs),
                })
            }
            StmtCompiled::If(box (ref cond, ref t, ref f)) => {
                let cond = cond.optimize_on_freeze(ctx);
                let t = t.optimize_on_freeze(ctx);
                let f = f.optimize_on_freeze(ctx);
                StmtsCompiled::if_stmt(span, cond, t, f)
            }
            StmtCompiled::For(box (ref var, ref over, ref body)) => {
                let var = var.optimize_on_freeze(ctx);
                let over = over.optimize_on_freeze(ctx);
                let body = body.optimize_on_freeze(ctx);
                StmtsCompiled::for_stmt(span, var, over, body)
            }
            ref s @ (StmtCompiled::PossibleGc | StmtCompiled::Break | StmtCompiled::Continue) => {
                StmtsCompiled::one(IrSpanned {
                    span,
                    node: s.clone(),
                })
            }
            StmtCompiled::AssignModify(ref lhs, op, ref rhs) => StmtsCompiled::one(IrSpanned {
                span,
                node: StmtCompiled::AssignModify(
                    lhs.optimize_on_freeze(ctx),
                    op,
                    rhs.optimize_on_freeze(ctx),
                ),
            }),
        }
    }