@@ -159,33 +159,57 @@ compile(#{module := Module} = Map) ->
159159 end ,
160160 load_form (Map , Data , Prefix , Forms , Specs ).
161161
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 }],
163171
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 }.
169175
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
175177
176178split_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 ) ->
179180 case lists :member (Tuple , Unreachable ) of
180181 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 );
183184 true ->
184- split_definition (T , File , Unreachable , Def , Defmacro , Exports , Functions )
185+ split_definition (T , File , Unreachable , Def , Defmacro , Macros , Exports , Functions )
185186 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 )).
189213
190214add_definition (Meta , Body , {Head , Tail }) ->
191215 case lists :keyfind (location , 1 , Meta ) of
@@ -241,20 +265,6 @@ is_macro(_) -> false.
241265
242266% Functions
243267
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-
258268functions_form (Line , Module , Def , Defmacro , Exports , Body ) ->
259269 {Spec , Info } = add_info_function (Line , Module , Def , Defmacro ),
260270 [{attribute , Line , export , lists :sort ([{'__info__' , 1 } | Exports ])}, Spec , Info | Body ].
0 commit comments