code: func (c *Call) String() string {
  	var buf bytes.Buffer
  
  	// Write name.
  	if c.Name != "" {
  		buf.WriteString(c.Name)
  	} else {
  		buf.WriteString("!UNNAMED")
  	}
  
  	// Write opening.
  	buf.WriteByte('(')
  
  	// Write child list.
  	for i, child := range c.Children {
  		if i > 0 {
  			buf.WriteString(", ")
  		}
  		buf.WriteString(child.String())
  	}
  
  	// Separate children and args, if necessary.
  	if len(c.Children) > 0 && len(c.Args) > 0 {
  		buf.WriteString(", ")
  	}
  
  	// Write arguments in key order.
  	for i, key := range c.keys() {
  		if i > 0 {
  			buf.WriteString(", ")
  		}
  		// If the Arg value is a Condition, then don't include
  		// the equal sign in the string representation.
  		switch v := c.Args[key].(type) {
  		case *Condition:
  			fmt.Fprintf(&buf, "%v %s", key, v.String())
  		default:
  			fmt.Fprintf(&buf, "%v=%s", key, formatValue(v))
  		}
  	}
  
  	// Write closing.
  	buf.WriteByte(')')
  
  	return buf.String()
  }
docs: // String returns the string representation of the call.