Skip to content

Commit 3c62340

Browse files
committed
Flatten __before_compile__ macro to make the new type check happy
1 parent 8b2839f commit 3c62340

File tree

1 file changed

+32
-31
lines changed

1 file changed

+32
-31
lines changed

rustler_mix/lib/rustler.ex

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -113,44 +113,43 @@ defmodule Rustler do
113113
end
114114
end
115115

116-
defmacro __before_compile__(_env) do
116+
defmacro __before_compile__(env) do
117117
default_load_data_value = %Rustler.Compiler.Config{}.load_data
118118
default_fun_value = %Rustler.Compiler.Config{}.load_data_fun
119119

120-
quote do
121-
@on_load :rustler_init
122-
123-
defmacrop _construct_load_data do
124-
default_load_data_value = unquote(default_load_data_value)
125-
default_fun_value = unquote(default_fun_value)
120+
load_data = Module.get_attribute(env.module, :load_data)
121+
load_data_fun = Module.get_attribute(env.module, :load_data_fun)
126122

127-
case {@load_data, @load_data_fun} do
128-
{load_data, ^default_fun_value} ->
129-
quote do
130-
unquote(load_data)
131-
end
123+
load_data =
124+
case {load_data, load_data_fun} do
125+
{load_data, ^default_fun_value} ->
126+
quote do
127+
unquote(load_data)
128+
end
132129

133-
{^default_load_data_value, {module, function}}
134-
when is_atom(module) and is_atom(function) ->
135-
quote do
136-
apply(unquote(module), unquote(function), [])
137-
end
130+
{^default_load_data_value, {module, function}}
131+
when is_atom(module) and is_atom(function) ->
132+
quote do
133+
apply(unquote(module), unquote(function), [])
134+
end
138135

139-
{^default_load_data_value, provided_value} ->
140-
raise """
141-
`load_data` has to be `{Module, :function}`.
142-
Instead received: #{inspect(provided_value)}
143-
"""
144-
145-
{load_data, load_data_fun} ->
146-
raise """
147-
Only `load_data` or `load_data_fun` can be provided. Instead received:
148-
>>> load_data: #{inspect(load_data)}
149-
>>> load_data_fun: #{inspect(load_data_fun)}
150-
"""
151-
end
136+
{^default_load_data_value, provided_value} ->
137+
raise """
138+
`load_data_fun` has to be `{Module, :function}`.
139+
Instead received: #{inspect(provided_value)}
140+
"""
141+
142+
{load_data, load_data_fun} ->
143+
raise """
144+
Only `load_data` or `load_data_fun` can be provided. Instead received:
145+
>>> load_data: #{inspect(load_data)}
146+
>>> load_data_fun: #{inspect(load_data_fun)}
147+
"""
152148
end
153149

150+
quote do
151+
@on_load :rustler_init
152+
154153
@doc false
155154
def rustler_init do
156155
# Remove any old modules that may be loaded so we don't get
@@ -164,7 +163,9 @@ defmodule Rustler do
164163
|> Application.app_dir(path)
165164
|> to_charlist()
166165

167-
:erlang.load_nif(load_path, _construct_load_data())
166+
load_data = unquote(load_data)
167+
168+
:erlang.load_nif(load_path, load_data)
168169
end
169170
end
170171
end

0 commit comments

Comments
 (0)