@@ -3242,15 +3242,15 @@ defmodule Module.Types.Descr do
32423242 end
32433243
32443244 defp map_literal_intersection_closed ( [ { k1 , v1 } | t1 ] , [ { k2 , _ } | _ ] = l2 ) when k1 < k2 do
3245- if v1 == @ not_set do
3245+ if is_optional_static ( v1 ) do
32463246 map_literal_intersection_closed ( t1 , l2 )
32473247 else
32483248 throw ( :empty )
32493249 end
32503250 end
32513251
32523252 defp map_literal_intersection_closed ( [ { k1 , _ } | _ ] = l1 , [ { k2 , v2 } | t2 ] ) when k1 > k2 do
3253- if v2 == @ not_set do
3253+ if is_optional_static ( v2 ) do
32543254 map_literal_intersection_closed ( l1 , t2 )
32553255 else
32563256 throw ( :empty )
@@ -3262,8 +3262,8 @@ defmodule Module.Types.Descr do
32623262 end
32633263
32643264 defp map_literal_intersection_closed ( t1 , t2 ) do
3265- if Enum . any? ( t1 , fn { _ , v } -> v != @ not_set end ) or
3266- Enum . any? ( t2 , fn { _ , v } -> v != @ not_set end ) do
3265+ if Enum . any? ( t1 , fn { _ , v } -> not is_optional_static ( v ) end ) or
3266+ Enum . any? ( t2 , fn { _ , v } -> not is_optional_static ( v ) end ) do
32673267 throw ( :empty )
32683268 end
32693269
@@ -5565,6 +5565,7 @@ defmodule Module.Types.Descr do
55655565 @ doc """
55665566 Returns all of the values that are part of a tuple.
55675567 """
5568+ def tuple_values ( :term ) , do: :badtuple
55685569 def tuple_values ( descr ) when descr == % { } , do: :badtuple
55695570
55705571 def tuple_values ( descr ) do
@@ -5578,7 +5579,13 @@ defmodule Module.Types.Descr do
55785579
55795580 { dynamic , static } ->
55805581 if tuple_only? ( static ) and descr_key? ( dynamic , :tuple ) do
5581- dynamic ( process_tuples_values ( Map . get ( dynamic , :tuple , :bdd_bot ) ) )
5582+ dynamic_value =
5583+ case dynamic do
5584+ :term -> term ( )
5585+ % { tuple: bdd } -> process_tuples_values ( bdd )
5586+ end
5587+
5588+ dynamic ( dynamic_value )
55825589 |> union ( process_tuples_values ( Map . get ( static , :tuple , :bdd_bot ) ) )
55835590 else
55845591 :badtuple
0 commit comments