@@ -377,7 +377,7 @@ defmodule Module.Types.Descr do
377
377
right_dynamic = Map . get ( right , :dynamic , right )
378
378
379
379
if empty? ( left_static ) do
380
- not empty? ( intersection ( left_dynamic , right_dynamic ) )
380
+ not disjoint? ( left_dynamic , right_dynamic )
381
381
else
382
382
subtype_static ( left_static , right_dynamic )
383
383
end
@@ -787,52 +787,6 @@ defmodule Module.Types.Descr do
787
787
end
788
788
end
789
789
790
- @ doc """
791
- Updates the `key` with a given type, assuming that the key is present
792
- in the descr, and that it is exclusively a map (or dynamic).
793
- """
794
- def map_update ( :term , _key , _type ) , do: :badmap
795
- def map_update ( descr , key , :term ) , do: map_update_static_value ( descr , key , :term )
796
-
797
- def map_update ( descr , key , type ) do
798
- case :maps . take ( :dynamic , type ) do
799
- :error -> map_update_static_value ( descr , key , type )
800
- { dynamic , _static } -> dynamic ( map_update_static_value ( descr , key , dynamic ) )
801
- end
802
- end
803
-
804
- def map_update_static_value ( descr , key , type ) do
805
- case :maps . take ( :dynamic , descr ) do
806
- :error ->
807
- cond do
808
- subtype? ( descr , open_map ( [ { key , term ( ) } ] ) ) -> map_put_static ( descr , key , type )
809
- map_only? ( descr ) -> :badkey
810
- true -> :badmap
811
- end
812
-
813
- { dynamic , static } when static == @ none ->
814
- if not disjoint? ( dynamic , open_map ( [ { key , term ( ) } ] ) ) do
815
- dynamic ( map_put_static ( dynamic , key , type ) )
816
- else
817
- :badkey
818
- end
819
-
820
- { dynamic , static } ->
821
- if not disjoint? ( dynamic , open_map ( [ { key , term ( ) } ] ) ) and
822
- subtype? ( static , open_map ( [ { key , type } ] ) ) do
823
- dynamic = map_put_static ( dynamic , key , type )
824
- static = map_put_static ( static , key , type )
825
- Map . put ( static , :dynamic , dynamic )
826
- else
827
- if map_only? ( static ) do
828
- :badkey
829
- else
830
- :badmap
831
- end
832
- end
833
- end
834
- end
835
-
836
790
@ doc """
837
791
Adds a `key` of a given type, assuming that the descr is exclusively
838
792
a map (or dynamic).
@@ -847,26 +801,26 @@ defmodule Module.Types.Descr do
847
801
end
848
802
end
849
803
850
- def map_put_static_value ( descr , key , type ) do
804
+ defp map_put_static_value ( descr , key , type ) do
851
805
case :maps . take ( :dynamic , descr ) do
852
806
:error ->
853
807
if map_only? ( descr ) do
854
- map_put_static ( descr , key , type )
808
+ map_put_static_descr ( descr , key , type )
855
809
else
856
810
:badmap
857
811
end
858
812
859
813
{ dynamic , static } when static == @ none ->
860
814
if descr_key? ( dynamic , :map ) do
861
- dynamic ( map_put_static ( dynamic , key , type ) )
815
+ dynamic ( map_put_static_descr ( dynamic , key , type ) )
862
816
else
863
817
:badmap
864
818
end
865
819
866
820
{ dynamic , static } ->
867
821
if descr_key? ( dynamic , :map ) and map_only? ( static ) do
868
- dynamic = map_put_static ( dynamic , key , type )
869
- static = map_put_static ( static , key , type )
822
+ dynamic = map_put_static_descr ( dynamic , key , type )
823
+ static = map_put_static_descr ( static , key , type )
870
824
union ( dynamic ( dynamic ) , static )
871
825
else
872
826
:badmap
@@ -875,7 +829,7 @@ defmodule Module.Types.Descr do
875
829
end
876
830
877
831
# Directly inserts a key of a given type into every positive and negative map
878
- def map_put_static ( descr , key , type ) do
832
+ defp map_put_static_descr ( descr , key , type ) do
879
833
map_delete_static ( descr , key )
880
834
|> Map . update! ( :map , fn dnf ->
881
835
Enum . map ( dnf , fn { tag , fields , negs } ->
0 commit comments