@@ -113,44 +113,43 @@ defmodule Rustler do
113
113
end
114
114
end
115
115
116
- defmacro __before_compile__ ( _env ) do
116
+ defmacro __before_compile__ ( env ) do
117
117
default_load_data_value = % Rustler.Compiler.Config { } . load_data
118
118
default_fun_value = % Rustler.Compiler.Config { } . load_data_fun
119
119
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 )
126
122
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
132
129
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
138
135
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
+ """
152
148
end
153
149
150
+ quote do
151
+ @ on_load :rustler_init
152
+
154
153
@ doc false
155
154
def rustler_init do
156
155
# Remove any old modules that may be loaded so we don't get
@@ -164,7 +163,9 @@ defmodule Rustler do
164
163
|> Application . app_dir ( path )
165
164
|> to_charlist ( )
166
165
167
- :erlang . load_nif ( load_path , _construct_load_data ( ) )
166
+ load_data = unquote ( load_data )
167
+
168
+ :erlang . load_nif ( load_path , load_data )
168
169
end
169
170
end
170
171
end
0 commit comments