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),
),
}),
}
}