@@ -159,33 +159,57 @@ compile(#{module := Module} = Map) ->
159
159
end ,
160
160
load_form (Map , Data , Prefix , Forms , Specs ).
161
161
162
- % Definitions
162
+ dynamic_form (#{module := Module , line := Line , file := File , attributes := Attributes ,
163
+ definitions := Definitions , unreachable := Unreachable }) ->
164
+ {Def , Defmacro , Macros , Exports , Functions } =
165
+ split_definition (Definitions , File , Unreachable , [], [], [], [], {[], []}),
166
+
167
+ Location = {elixir_utils :characters_to_list (elixir_utils :relative_to_cwd (File )), Line },
168
+ Prefix = [{attribute , Line , file , Location },
169
+ {attribute , Line , module , Module },
170
+ {attribute , Line , compile , no_auto_import }],
163
171
164
- split_definition ([{Tuple , def , Meta , Clauses } | T ], File , Unreachable ,
165
- Def , Defmacro , Exports , Functions ) ->
166
- {_ , _ , N , A , _ } = Function = translate_definition (def , Meta , File , Tuple , Clauses ),
167
- split_definition (T , File , Unreachable , [Tuple | Def ], Defmacro , [{N , A } | Exports ],
168
- add_definition (Meta , Function , Functions ));
172
+ Forms0 = functions_form (Line , Module , Def , Defmacro , Exports , Functions ),
173
+ Forms1 = attributes_form (Line , Attributes , Forms0 ),
174
+ {Prefix , Forms1 , Macros , Unreachable }.
169
175
170
- split_definition ([{Tuple , defmacro , Meta , Clauses } | T ], File , Unreachable ,
171
- Def , Defmacro , Exports , Functions ) ->
172
- {_ , _ , N , A , _ } = Function = translate_definition (defmacro , Meta , File , Tuple , Clauses ),
173
- split_definition (T , File , Unreachable , Def , [Tuple | Defmacro ], [{N , A } | Exports ],
174
- add_definition (Meta , Function , Functions ));
176
+ % Definitions
175
177
176
178
split_definition ([{Tuple , Kind , Meta , Clauses } | T ], File , Unreachable ,
177
- Def , Defmacro , Exports , Functions ) ->
178
- Function = translate_definition (Kind , Meta , File , Tuple , Clauses ),
179
+ Def , Defmacro , Macros , Exports , Functions ) ->
179
180
case lists :member (Tuple , Unreachable ) of
180
181
false ->
181
- split_definition (T , File , Unreachable , Def , Defmacro , Exports ,
182
- add_definition ( Meta , Function , Functions ) );
182
+ split_definition (Tuple , Kind , Meta , Clauses , T , File , Unreachable ,
183
+ Def , Defmacro , Macros , Exports , Functions );
183
184
true ->
184
- split_definition (T , File , Unreachable , Def , Defmacro , Exports , Functions )
185
+ split_definition (T , File , Unreachable , Def , Defmacro , Macros , Exports , Functions )
185
186
end ;
186
-
187
- split_definition ([], _File , _Unreachable , Def , Defmacro , Exports , {Head , Tail }) ->
188
- {Def , Defmacro , Exports , Head ++ Tail }.
187
+ split_definition ([], _File , _Unreachable , Def , Defmacro , Macros , Exports , {Head , Tail }) ->
188
+ {Def , Defmacro , Macros , Exports , Head ++ Tail }.
189
+
190
+ split_definition (Tuple , def , Meta , Clauses , T , File , Unreachable ,
191
+ Def , Defmacro , Macros , Exports , Functions ) ->
192
+ {_ , _ , N , A , _ } = Entry = translate_definition (def , Meta , File , Tuple , Clauses ),
193
+ split_definition (T , File , Unreachable , [Tuple | Def ], Defmacro , Macros , [{N , A } | Exports ],
194
+ add_definition (Meta , Entry , Functions ));
195
+
196
+ split_definition (Tuple , defp , Meta , Clauses , T , File , Unreachable ,
197
+ Def , Defmacro , Macros , Exports , Functions ) ->
198
+ Entry = translate_definition (defp , Meta , File , Tuple , Clauses ),
199
+ split_definition (T , File , Unreachable , Def , Defmacro , Macros , Exports ,
200
+ add_definition (Meta , Entry , Functions ));
201
+
202
+ split_definition (Tuple , defmacro , Meta , Clauses , T , File , Unreachable ,
203
+ Def , Defmacro , Macros , Exports , Functions ) ->
204
+ {_ , _ , N , A , _ } = Entry = translate_definition (defmacro , Meta , File , Tuple , Clauses ),
205
+ split_definition (T , File , Unreachable , Def , [Tuple | Defmacro ], [Tuple | Macros ], [{N , A } | Exports ],
206
+ add_definition (Meta , Entry , Functions ));
207
+
208
+ split_definition (Tuple , defmacrop , Meta , Clauses , T , File , Unreachable ,
209
+ Def , Defmacro , Macros , Exports , Functions ) ->
210
+ Entry = translate_definition (defmacro , Meta , File , Tuple , Clauses ),
211
+ split_definition (T , File , Unreachable , Def , Defmacro , [Tuple | Macros ], Exports ,
212
+ add_definition (Meta , Entry , Functions )).
189
213
190
214
add_definition (Meta , Body , {Head , Tail }) ->
191
215
case lists :keyfind (location , 1 , Meta ) of
@@ -241,20 +265,6 @@ is_macro(_) -> false.
241
265
242
266
% Functions
243
267
244
- dynamic_form (#{module := Module , line := Line , file := File , attributes := Attributes ,
245
- definitions := Definitions , unreachable := Unreachable }) ->
246
- {Def , Defmacro , Exports , Functions } =
247
- split_definition (Definitions , File , Unreachable , [], [], [], {[], []}),
248
-
249
- Location = {elixir_utils :characters_to_list (elixir_utils :relative_to_cwd (File )), Line },
250
- Prefix = [{attribute , Line , file , Location },
251
- {attribute , Line , module , Module },
252
- {attribute , Line , compile , no_auto_import }],
253
-
254
- Forms0 = functions_form (Line , Module , Def , Defmacro , Exports , Functions ),
255
- Forms1 = attributes_form (Line , Attributes , Forms0 ),
256
- {Prefix , Forms1 , Defmacro , Unreachable }.
257
-
258
268
functions_form (Line , Module , Def , Defmacro , Exports , Body ) ->
259
269
{Spec , Info } = add_info_function (Line , Module , Def , Defmacro ),
260
270
[{attribute , Line , export , lists :sort ([{'__info__' , 1 } | Exports ])}, Spec , Info | Body ].
0 commit comments