From 17b3eb97de1822644d1611efbfc9c7cd2dd7722c Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sun, 17 May 2020 10:50:36 +0200 Subject: prog: speed up foreachArgImpl Don't generate garbage for ctx. This speeds up mutation tests by 20%. --- prog/analysis.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/prog/analysis.go b/prog/analysis.go index 9300240b5..c41dae25b 100644 --- a/prog/analysis.go +++ b/prog/analysis.go @@ -108,11 +108,11 @@ type ArgCtx struct { } func ForeachSubArg(arg Arg, f func(Arg, *ArgCtx)) { - foreachArgImpl(arg, ArgCtx{}, f) + foreachArgImpl(arg, &ArgCtx{}, f) } func ForeachArg(c *Call, f func(Arg, *ArgCtx)) { - ctx := ArgCtx{} + ctx := &ArgCtx{} if c.Ret != nil { foreachArgImpl(c.Ret, ctx, f) } @@ -123,8 +123,10 @@ func ForeachArg(c *Call, f func(Arg, *ArgCtx)) { } } -func foreachArgImpl(arg Arg, ctx ArgCtx, f func(Arg, *ArgCtx)) { - f(arg, &ctx) +func foreachArgImpl(arg Arg, ctx *ArgCtx, f func(Arg, *ArgCtx)) { + ctx0 := *ctx + defer func() { *ctx = ctx0 }() + f(arg, ctx) if ctx.Stop { return } -- cgit mrf-deployment