From 77411fb4bdcab6222a51ef1a4a0f625b7f4a4523 Mon Sep 17 00:00:00 2001 From: Fumitoshi Ukai Date: Fri, 19 Jun 2015 15:46:21 +0900 Subject: reduce allocation in funcPatsubst benchmark old ns/op new ns/op delta BenchmarkFuncPatsubst 2030 1102 -45.71% benchmark old allocs new allocs delta BenchmarkFuncPatsubst 9 1 -88.89% benchmark old bytes new bytes delta BenchmarkFuncPatsubst 297 32 -89.23% --- func.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'func.go') diff --git a/func.go b/func.go index 62e9af4..f6c3b41 100644 --- a/func.go +++ b/func.go @@ -182,10 +182,18 @@ func (f *funcPatsubst) Eval(w io.Writer, ev *Evaluator) { pat := fargs[0] repl := fargs[1] ws := newWordScanner(fargs[2]) - sw := ssvWriter{w: w} + space := false for ws.Scan() { - t := substPatternBytes(pat, repl, ws.Bytes()) - sw.Write(t) + if space { + writeByte(w, ' ') + } + pre, subst, post := substPatternBytes(pat, repl, ws.Bytes()) + w.Write(pre) + if subst != nil { + w.Write(subst) + w.Write(post) + } + space = true } freeBuf(abuf) addStats("funcbody", "patsubst", t) -- cgit v1.2.3