}
func (p *PipeNode) String() string {
- s := ""
+ var sb strings.Builder
if len(p.Decl) > 0 {
for i, v := range p.Decl {
if i > 0 {
- s += ", "
+ sb.WriteString(", ")
}
- s += v.String()
+ sb.WriteString(v.String())
}
- s += " := "
+ sb.WriteString(" := ")
}
for i, c := range p.Cmds {
if i > 0 {
- s += " | "
+ sb.WriteString(" | ")
}
- s += c.String()
+ sb.WriteString(c.String())
}
- return s
+ return sb.String()
}
func (p *PipeNode) tree() *Tree {
}
func (c *CommandNode) String() string {
- s := ""
+ var sb strings.Builder
for i, arg := range c.Args {
if i > 0 {
- s += " "
+ sb.WriteByte(' ')
}
if arg, ok := arg.(*PipeNode); ok {
- s += "(" + arg.String() + ")"
+ sb.WriteByte('(')
+ sb.WriteString(arg.String())
+ sb.WriteByte(')')
continue
}
- s += arg.String()
+ sb.WriteString(arg.String())
}
- return s
+ return sb.String()
}
func (c *CommandNode) tree() *Tree {
}
func (v *VariableNode) String() string {
- s := ""
+ var sb strings.Builder
for i, id := range v.Ident {
if i > 0 {
- s += "."
+ sb.WriteByte('.')
}
- s += id
+ sb.WriteString(id)
}
- return s
+ return sb.String()
}
func (v *VariableNode) tree() *Tree {
}
func (f *FieldNode) String() string {
- s := ""
+ var sb strings.Builder
for _, id := range f.Ident {
- s += "." + id
+ sb.WriteByte('.')
+ sb.WriteString(id)
}
- return s
+ return sb.String()
}
func (f *FieldNode) tree() *Tree {
}
}
}
+
+var sink string
+
+func BenchmarkVariableString(b *testing.B) {
+ v := &VariableNode{
+ Ident: []string{"$", "A", "BB", "CCC", "THIS_IS_THE_VARIABLE_BEING_PROCESSED"},
+ }
+ b.ResetTimer()
+ b.ReportAllocs()
+ for i := 0; i < b.N; i++ {
+ sink = v.String()
+ }
+ if sink == "" {
+ b.Fatal("Benchmark was not run")
+ }
+}