use sync.Pool for evalBuffer and wordBuffer
diff --git a/evalcmd.go b/evalcmd.go
index 7d15981..14c06e5 100644
--- a/evalcmd.go
+++ b/evalcmd.go
@@ -239,13 +239,13 @@
 	if err != nil {
 		return nil, ev.errorf("parse cmd %q: %v", r.cmd, err)
 	}
-	buf := newBuf()
+	buf := newEbuf()
 	err = expr.Eval(buf, ev)
 	if err != nil {
 		return nil, err
 	}
 	cmds := buf.String()
-	freeBuf(buf)
+	buf.release()
 	logf("evalcmd: %q => %q", r.cmd, cmds)
 	var runners []runner
 	for _, cmd := range strings.Split(cmds, "\n") {