code: func (nm NodeMap) FindOrInsertNode(info NodeInfo, kept NodeSet) *Node {
  	if kept != nil {
  		if _, ok := kept[info]; !ok {
  			return nil
  		}
  	}
  
  	if n, ok := nm[info]; ok {
  		return n
  	}
  
  	n := &Node{
  		Info:        info,
  		In:          make(EdgeMap),
  		Out:         make(EdgeMap),
  		LabelTags:   make(TagMap),
  		NumericTags: make(map[string]TagMap),
  	}
  	nm[info] = n
  	if info.Address == 0 && info.Lineno == 0 {
  		// This node represents the whole function, so point Function
  		// back to itself.
  		n.Function = n
  		return n
  	}
  	// Find a node that represents the whole function.
  	info.Address = 0
  	info.Lineno = 0
  	n.Function = nm.FindOrInsertNode(info, nil)
  	return n
  }
docs: // FindOrInsertNode takes the info for a node and either returns a matching node
  // from the node map if one exists, or adds one to the map if one does not.
  // If kept is non-nil, nodes are only added if they can be located on it.