@@ -642,17 +642,17 @@ defmodule Module.Types.Descr do
642642 defp numberize ( :bitmap , bitmap ) , do: bitmap
643643
644644 defp numberize ( :map , bdd ) do
645- bdd_map ( bdd , fn { tag , fields } ->
646- { tag , fields_map ( fn _key , value -> numberize ( value ) end , fields ) }
645+ bdd_map ( bdd , fn bdd_leaf ( tag , fields ) ->
646+ bdd_leaf_new ( tag , fields_map ( fn _key , value -> numberize ( value ) end , fields ) )
647647 end )
648648 end
649649
650650 defp numberize ( :tuple , bdd ) do
651- bdd_map ( bdd , fn { tag , fields } -> { tag , Enum . map ( fields , & numberize / 1 ) } end )
651+ bdd_map ( bdd , fn bdd_leaf ( tag , fields ) -> bdd_leaf_new ( tag , Enum . map ( fields , & numberize / 1 ) ) end )
652652 end
653653
654654 defp numberize ( :list , bdd ) do
655- bdd_map ( bdd , fn { head , tail } -> { numberize ( head ) , numberize ( tail ) } end )
655+ bdd_map ( bdd , fn bdd_leaf ( head , tail ) -> bdd_leaf_new ( numberize ( head ) , numberize ( tail ) ) end )
656656 end
657657
658658 @ doc """
@@ -3580,7 +3580,7 @@ defmodule Module.Types.Descr do
35803580 else
35813581 domain_keys_type ->
35823582 { _seen , acc } =
3583- bdd_reduce ( bdd , { % { } , domain_keys_type } , fn { _tag , fields } , seen_acc ->
3583+ bdd_reduce ( bdd , { % { } , domain_keys_type } , fn bdd_leaf ( _tag , fields ) , seen_acc ->
35843584 fields_fold ( fields , seen_acc , fn key , _type , { seen , acc } ->
35853585 if Map . has_key? ( seen , key ) do
35863586 { seen , acc }
@@ -3832,8 +3832,8 @@ defmodule Module.Types.Descr do
38323832 defp map_put_key_static ( % { map: bdd } = descr , key , type ) do
38333833 bdd =
38343834 bdd_map ( bdd , fn
3835- { :closed , fields } when type == @ not_set -> { :closed , fields }
3836- { tag , fields } -> { tag , fields_store ( key , type , fields ) }
3835+ bdd_leaf ( :closed , fields ) when type == @ not_set -> bdd_leaf_new ( :closed , fields )
3836+ bdd_leaf ( tag , fields ) -> bdd_leaf_new ( tag , fields_store ( key , type , fields ) )
38373837 end )
38383838
38393839 % { descr | map: bdd }
@@ -3878,7 +3878,7 @@ defmodule Module.Types.Descr do
38783878
38793879 defp map_update_merge_atom_key ( bdd , dnf ) do
38803880 { _seen , acc } =
3881- bdd_reduce ( bdd , { % { } , none ( ) } , fn { _tag , fields } , seen_acc ->
3881+ bdd_reduce ( bdd , { % { } , none ( ) } , fn bdd_leaf ( _tag , fields ) , seen_acc ->
38823882 fields_fold ( fields , seen_acc , fn key , _type , { seen , acc } ->
38833883 if Map . has_key? ( seen , key ) do
38843884 { seen , acc }
@@ -3893,7 +3893,7 @@ defmodule Module.Types.Descr do
38933893 end
38943894
38953895 defp map_update_any_atom_key? ( bdd , dnf ) do
3896- bdd_reduce ( bdd , % { } , fn { _tag , fields } , acc ->
3896+ bdd_reduce ( bdd , % { } , fn bdd_leaf ( _tag , fields ) , acc ->
38973897 fields_fold ( fields , acc , fn key , _type , acc ->
38983898 if Map . has_key? ( acc , key ) do
38993899 acc
@@ -3977,8 +3977,8 @@ defmodule Module.Types.Descr do
39773977
39783978 defp map_update_put_domains ( bdd , domain_keys , type_fun , force? ) do
39793979 bdd =
3980- bdd_map ( bdd , fn { tag , fields } ->
3981- { map_update_put_domain ( tag , domain_keys , type_fun , force? ) , fields }
3980+ bdd_map ( bdd , fn bdd_leaf ( tag , fields ) ->
3981+ bdd_leaf_new ( map_update_put_domain ( tag , domain_keys , type_fun , force? ) , fields )
39823982 end )
39833983
39843984 % { map: bdd }
@@ -4211,7 +4211,7 @@ defmodule Module.Types.Descr do
42114211
42124212 defp map_keys_from_negated_set ( set , bdd ) do
42134213 bdd
4214- |> bdd_reduce ( % { } , fn { _ , fields } , acc ->
4214+ |> bdd_reduce ( % { } , fn bdd_leaf ( _ , fields ) , acc ->
42154215 fields_fold ( fields , acc , fn atom , _ , acc ->
42164216 if :sets . is_element ( atom , set ) , do: acc , else: Map . put ( acc , atom , true )
42174217 end )
@@ -5679,7 +5679,12 @@ defmodule Module.Types.Descr do
56795679
56805680 # Takes a static map type and removes an index from it.
56815681 defp tuple_delete_static ( % { tuple: bdd } , index ) do
5682- % { tuple: bdd_map ( bdd , fn { tag , elements } -> { tag , List . delete_at ( elements , index ) } end ) }
5682+ % {
5683+ tuple:
5684+ bdd_map ( bdd , fn bdd_leaf ( tag , elements ) ->
5685+ bdd_leaf_new ( tag , List . delete_at ( elements , index ) )
5686+ end )
5687+ }
56835688 end
56845689
56855690 # If there is no map part to this static type, there is nothing to delete.
@@ -5743,7 +5748,7 @@ defmodule Module.Types.Descr do
57435748
57445749 defp tuple_insert_static ( descr , index , type ) do
57455750 Map . update! ( descr , :tuple , fn bdd ->
5746- bdd_map ( bdd , fn { tag , elements } ->
5751+ bdd_map ( bdd , fn bdd_leaf ( tag , elements ) ->
57475752 # If the tuple is open, then we want List.insert_at to put the new element at the correct
57485753 # index, which requires filling the tuple with `term()` values first.
57495754 # Closed tuples of an incorrect size will be ignored (they are cancelled by the earlier
@@ -5755,7 +5760,7 @@ defmodule Module.Types.Descr do
57555760 elements
57565761 end
57575762
5758- { tag , List . insert_at ( elements , index , type ) }
5763+ bdd_leaf_new ( tag , List . insert_at ( elements , index , type ) )
57595764 end )
57605765 end )
57615766 end
@@ -6287,14 +6292,11 @@ defmodule Module.Types.Descr do
62876292 :bdd_top ->
62886293 :bdd_top
62896294
6290- bdd_leaf ( arg1 , arg2 ) ->
6291- { arg1 , arg2 } = fun . ( { arg1 , arg2 } )
6292- bdd_leaf_new ( arg1 , arg2 )
6295+ bdd_leaf ( _ , _ ) = leaf ->
6296+ fun . ( leaf )
62936297
6294- { _ , bdd_leaf ( arg1 , arg2 ) , left , union , right } ->
6295- { arg1 , arg2 } = fun . ( { arg1 , arg2 } )
6296- literal = bdd_leaf_new ( arg1 , arg2 )
6297- bdd_node_new ( literal , bdd_map ( left , fun ) , bdd_map ( union , fun ) , bdd_map ( right , fun ) )
6298+ { _ , leaf , left , union , right } ->
6299+ bdd_node_new ( fun . ( leaf ) , bdd_map ( left , fun ) , bdd_map ( union , fun ) , bdd_map ( right , fun ) )
62986300 end
62996301 end
63006302
@@ -6306,11 +6308,11 @@ defmodule Module.Types.Descr do
63066308 :bdd_top ->
63076309 acc
63086310
6309- bdd_leaf ( arg1 , arg2 ) ->
6310- fun . ( { arg1 , arg2 } , acc )
6311+ bdd_leaf ( _ , _ ) = leaf ->
6312+ fun . ( leaf , acc )
63116313
6312- { _ , bdd_leaf ( arg1 , arg2 ) , left , union , right } ->
6313- acc = fun . ( { arg1 , arg2 } , acc )
6314+ { _ , leaf , left , union , right } ->
6315+ acc = fun . ( leaf , acc )
63146316 acc = bdd_reduce ( left , acc , fun )
63156317 acc = bdd_reduce ( union , acc , fun )
63166318 acc = bdd_reduce ( right , acc , fun )
0 commit comments