Skip to content

Commit d11d619

Browse files
committed
Do not delete enforce_keys on defstruct, closes #12126
1 parent f0943e7 commit d11d619

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

lib/elixir/lib/kernel/utils.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,10 @@ defmodule Kernel.Utils do
138138
fields = :lists.map(mapper, fields)
139139

140140
enforce_keys =
141-
case :ets.take(set, :enforce_keys) do
142-
[{_, enforce_keys, _, _}] when is_list(enforce_keys) -> enforce_keys
143-
[{_, enforce_key, _, _}] -> [enforce_key]
144-
[] -> []
141+
case Module.get_attribute(module, :enforce_keys) do
142+
nil -> []
143+
enforce_keys when is_list(enforce_keys) -> enforce_keys
144+
enforce_key -> [enforce_key]
145145
end
146146

147147
# TODO: Make it raise on v2.0

lib/elixir/test/elixir/map_test.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,10 @@ defmodule MapTest do
393393
defmodule TestMod do
394394
@enforce_keys :foo
395395
defstruct [:foo]
396+
397+
# Verify it remain set afterwards
398+
:foo = @enforce_keys
399+
396400
def foo do
397401
%TestMod{}
398402
end

0 commit comments

Comments
 (0)