code: func (v *evalVisitor) evalFieldFunc(name string, funcVal reflect.Value, exprRoot bool) reflect.Value {
  	ensureValidHelper(name, funcVal)
  
  	var options *Options
  	if exprRoot {
  		// create function arg with all params/hash
  		expr := v.curExpr()
  		options = v.helperOptions(expr)
  
  		// ok, that expression was a function call
  		v.exprFunc[expr] = true
  	} else {
  		// we are not at root of expression, so we are a parameter... and we don't like
  		// infinite loops caused by trying to parse ourself forever
  		options = newEmptyOptions(v)
  	}
  
  	return v.callFunc(name, funcVal, options)
  }
docs: // evalFieldFunc evaluates given function