| 694 | } |
| 695 | |
| 696 | function updateMap(map, k, v) { |
| 697 | let newRoot; |
| 698 | let newSize; |
| 699 | if (!map._root) { |
| 700 | if (v === NOT_SET) { |
| 701 | return map; |
| 702 | } |
| 703 | newSize = 1; |
| 704 | newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]); |
| 705 | } else { |
| 706 | const didChangeSize = MakeRef(); |
| 707 | const didAlter = MakeRef(); |
| 708 | newRoot = updateNode( |
| 709 | map._root, |
| 710 | map.__ownerID, |
| 711 | 0, |
| 712 | undefined, |
| 713 | k, |
| 714 | v, |
| 715 | didChangeSize, |
| 716 | didAlter |
| 717 | ); |
| 718 | if (!didAlter.value) { |
| 719 | return map; |
| 720 | } |
| 721 | newSize = map.size + (didChangeSize.value ? (v === NOT_SET ? -1 : 1) : 0); |
| 722 | } |
| 723 | if (map.__ownerID) { |
| 724 | map.size = newSize; |
| 725 | map._root = newRoot; |
| 726 | map.__hash = undefined; |
| 727 | map.__altered = true; |
| 728 | return map; |
| 729 | } |
| 730 | return newRoot ? makeMap(newSize, newRoot) : emptyMap(); |
| 731 | } |
| 732 | |
| 733 | function updateNode( |
| 734 | node, |