Skip to content

Commit e581128

Browse files
committed
Avoid double negation removal pass on map pretty printing
1 parent 2639028 commit e581128

1 file changed

Lines changed: 19 additions & 12 deletions

File tree

lib/elixir/lib/module/types/descr.ex

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2990,7 +2990,7 @@ defmodule Module.Types.Descr do
29902990
bdd_leaf(tag, fields_store(key, t_diff, fields))
29912991
end
29922992

2993-
_ ->
2993+
:none ->
29942994
bdd_difference(map1, map2)
29952995
end
29962996

@@ -3011,7 +3011,7 @@ defmodule Module.Types.Descr do
30113011
:disjoint -> :disjoint
30123012
:left_subtype_of_right -> :subtype
30133013
{:one_key_difference, _, v1, v2} -> if subtype?(v1, v2), do: :subtype, else: :none
3014-
_ -> :none
3014+
:none -> :none
30153015
end
30163016
end
30173017

@@ -4332,16 +4332,20 @@ defmodule Module.Types.Descr do
43324332
do: {false, map_domain_tag_to_type(tag), map_new(tag, fields)}
43334333

43344334
# Continue to eliminate negations while length of list of negs decreases
4335-
defp map_eliminate_while_negs_decrease(tag, fields, []), do: {tag, fields, []}
4335+
defp map_eliminate_while_negs_decrease(tag, fields, []), do: [{tag, fields, []}]
43364336

43374337
defp map_eliminate_while_negs_decrease(tag, fields, negs) do
4338-
n = length(negs)
4339-
{fields, negs} = maybe_eliminate_map_negations(tag, fields, negs)
4340-
4341-
if length(negs) < n do
4342-
map_eliminate_while_negs_decrease(tag, fields, negs)
4338+
try do
4339+
maybe_eliminate_map_negations(tag, fields, negs)
4340+
catch
4341+
:empty -> []
43434342
else
4344-
{tag, fields, negs}
4343+
{fields, new_negs} ->
4344+
if length(new_negs) < length(negs) do
4345+
map_eliminate_while_negs_decrease(tag, fields, new_negs)
4346+
else
4347+
[{tag, fields, new_negs}]
4348+
end
43454349
end
43464350
end
43474351

@@ -4366,7 +4370,10 @@ defmodule Module.Types.Descr do
43664370
:disjoint ->
43674371
{acc_fields, acc_negs}
43684372

4369-
_ ->
4373+
:left_subtype_of_right ->
4374+
throw(:empty)
4375+
4376+
:none ->
43704377
{acc_fields, [neg | acc_negs]}
43714378
end
43724379
end
@@ -4522,8 +4529,8 @@ defmodule Module.Types.Descr do
45224529

45234530
defp map_to_quoted(bdd, opts) do
45244531
bdd
4525-
|> map_bdd_to_dnf_no_negations()
4526-
|> Enum.map(fn {tag, fields, negs} ->
4532+
|> map_bdd_to_dnf_with_negations()
4533+
|> Enum.flat_map(fn {tag, fields, negs} ->
45274534
map_eliminate_while_negs_decrease(tag, fields, negs)
45284535
end)
45294536
|> map_fusion()

0 commit comments

Comments
 (0)