| 1609 | } |
| 1610 | |
| 1611 | func deepCopyNodeSeen(n *yaml.Node, seen map[*yaml.Node]*yaml.Node) *yaml.Node { |
| 1612 | if n == nil { |
| 1613 | return nil |
| 1614 | } |
| 1615 | if cp, ok := seen[n]; ok { |
| 1616 | return cp |
| 1617 | } |
| 1618 | cp := *n |
| 1619 | seen[n] = &cp |
| 1620 | if n.Alias != nil { |
| 1621 | cp.Alias = deepCopyNodeSeen(n.Alias, seen) |
| 1622 | } |
| 1623 | if len(n.Content) > 0 { |
| 1624 | cp.Content = make([]*yaml.Node, len(n.Content)) |
| 1625 | for i := range n.Content { |
| 1626 | cp.Content[i] = deepCopyNodeSeen(n.Content[i], seen) |
| 1627 | } |
| 1628 | } |
| 1629 | return &cp |
| 1630 | } |
| 1631 | |
| 1632 | // copyNodeShallow copies type/tag/value and resets content to match src, but |
| 1633 | // keeps the same destination node pointer to preserve parent relations/comments. |