code: func (g *Generator) functionName(prefix string, t reflect.Type) string {
  	prefix = joinFunctionNameParts(true, "easyjson", g.hashString, prefix)
  	name := joinFunctionNameParts(true, prefix, g.safeName(t))
  
  	// Most of the names will be unique, try a shortcut first.
  	if e, ok := g.functionNames[name]; !ok || e == t {
  		g.functionNames[name] = t
  		return name
  	}
  
  	// Search if the function already exists.
  	for name1, t1 := range g.functionNames {
  		if t1 == t && strings.HasPrefix(name1, prefix) {
  			return name1
  		}
  	}
  
  	// Create a new name in the case of a clash.
  	for i := 1; ; i++ {
  		nm := fmt.Sprint(name, i)
  		if _, ok := g.functionNames[nm]; ok {
  			continue
  		}
  		g.functionNames[nm] = t
  		return nm
  	}
  }
docs: // functionName returns a function name for a given type with a given prefix. If a function
  // with this prefix already exists for a type, it is returned.
  //
  // Method is used to track encoder/decoder names for the type.