Skip to content

Commit a91aa70

Browse files
author
José Valim
committed
Do not expose protocol convention on assert_impl!
Closes #2594
1 parent 301c7fd commit a91aa70

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

lib/elixir/lib/protocol.ex

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,13 @@ defmodule Protocol do
8585
Returns `:ok` if so, otherwise raises ArgumentError.
8686
"""
8787
@spec assert_impl!(module, module) :: :ok | no_return
88-
def assert_impl!(protocol, impl) do
89-
assert_impl!(protocol, impl, "")
88+
def assert_impl!(protocol, base) do
89+
assert_impl!(protocol, base, "")
9090
end
9191

92-
defp assert_impl!(protocol, impl, extra) do
92+
defp assert_impl!(protocol, base, extra) do
93+
impl = Module.concat(protocol, base)
94+
9395
case Code.ensure_compiled(impl) do
9496
{:module, ^impl} -> :ok
9597
_ -> raise ArgumentError,
@@ -574,14 +576,14 @@ defmodule Protocol do
574576
end
575577

576578
defp derive(protocol, for, struct, opts, env) do
577-
impl = Module.concat(protocol, Map)
578579
extra = ", cannot derive #{inspect protocol} for #{inspect for}"
579580
assert_protocol!(protocol, extra)
580-
assert_impl!(protocol, impl, extra)
581+
assert_impl!(protocol, Map, extra)
581582

582583
# Clean up variables from eval context
583584
env = %{env | vars: [], export_vars: nil}
584585
args = [for, struct, opts]
586+
impl = Module.concat(protocol, Map)
585587

586588
:elixir_module.expand_callback(env.line, impl, :__deriving__, args, env, fn
587589
mod, fun, args ->

0 commit comments

Comments
 (0)