Skip to content

Commit de32dff

Browse files
committed
Convert maps to list before traversing in descr
1 parent a6ba0cb commit de32dff

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3525,7 +3525,7 @@ defmodule Module.Types.Descr do
35253525

35263526
defp map_materialize_negated_set(set, bdd) do
35273527
all_fields = bdd_reduce(bdd, %{}, fn {_, fields}, acc -> Map.merge(fields, acc) end)
3528-
for {atom, _} <- all_fields, not :sets.is_element(atom, set), do: atom
3528+
for {atom, _} <- :maps.to_list(all_fields), not :sets.is_element(atom, set), do: atom
35293529
end
35303530

35313531
# Compute which keys are optional, which ones are required, as well as domain keys

lib/elixir/test/elixir/module/types/descr_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1895,6 +1895,11 @@ defmodule Module.Types.DescrTest do
18951895

18961896
assert map_get(closed_map([{domain_key(:atom), integer()}]), atom([:a, :b])) ==
18971897
{true, integer()}
1898+
1899+
# Have one of the keys be a __struct__
1900+
map = closed_map([{:a, atom([:a])}, {:__struct__, term()}, {domain_key(:atom), pid()}])
1901+
{true, term} = map_get(map, atom() |> difference(atom([:a])))
1902+
assert equal?(term, term())
18981903
end
18991904

19001905
test "with lists" do

0 commit comments

Comments
 (0)