@@ -10,19 +10,17 @@ defmodule ElixirScript.FindUsedFunctions do
1010 @ spec execute ( [ atom ] , pid ) :: nil
1111 def execute ( entry_modules , pid ) do
1212 entry_modules
13- |> List . wrap
14- |> Enum . each ( fn
15- module ->
16- walk_module ( module , pid )
13+ |> List . wrap ( )
14+ |> Enum . each ( fn module ->
15+ walk_module ( module , pid )
1716 end )
1817
1918 pid
20- |> ElixirScript.State . list_modules
21- |> Enum . each ( fn
22- { module , info } ->
23- if get_in ( info , [ :attributes , :protocol_impl ] ) do
24- walk_module ( module , pid )
25- end
19+ |> ElixirScript.State . list_modules ( )
20+ |> Enum . each ( fn { module , info } ->
21+ if get_in ( info , [ :attributes , :protocol_impl ] ) do
22+ walk_module ( module , pid )
23+ end
2624 end )
2725 end
2826
@@ -37,27 +35,33 @@ defmodule ElixirScript.FindUsedFunctions do
3735 unreachable: unreachable
3836 } = ModuleState . get_module ( pid , module )
3937
40- reachable_defs = Enum . filter ( defs , fn
41- { _ , type , _ , _ } when type in [ :defmacro , :defmacrop ] -> false
42- { name , _ , _ , _ } ->
43- not ( name in unreachable )
44- _ -> true
45- end )
38+ reachable_defs =
39+ Enum . filter ( defs , fn
40+ { _ , type , _ , _ } when type in [ :defmacro , :defmacrop ] ->
41+ false
42+
43+ { name , _ , _ , _ } ->
44+ name not in unreachable
45+
46+ _ ->
47+ true
48+ end )
4649
4750 state = % {
4851 pid: pid ,
4952 module: module
5053 }
5154
52- Enum . each ( reachable_defs , fn ( { name , _type , _ , _clauses } ) ->
53- ModuleState . add_used ( state . pid , module , name )
55+ Enum . each ( reachable_defs , fn { name , _type , _ , _clauses } ->
56+ ModuleState . put_used ( state . pid , module , name )
5457 end )
5558
5659 Enum . each ( reachable_defs , & walk ( & 1 , state ) )
5760 end
5861
5962 defp walk_module ( module , function , arity , pid ) do
6063 function = { function , arity }
64+
6165 unless ModuleState . has_used? ( pid , module , function ) do
6266 info = ModuleState . get_module ( pid , module )
6367
@@ -66,13 +70,15 @@ defmodule ElixirScript.FindUsedFunctions do
6670 module: module
6771 }
6872
69- reachable_def = Enum . find ( Map . get ( info , :definitions , [ ] ) , fn { name , _ , _ , _ } -> name == function end )
73+ reachable_def =
74+ Enum . find ( Map . get ( info , :definitions , [ ] ) , fn { name , _ , _ , _ } -> name == function end )
7075
7176 case reachable_def do
7277 nil ->
7378 nil
79+
7480 { name , _type , _ , _clauses } = func ->
75- ModuleState . add_used ( state . pid , module , name )
81+ ModuleState . put_used ( state . pid , module , name )
7682 walk ( func , state )
7783 end
7884 end
@@ -82,13 +88,13 @@ defmodule ElixirScript.FindUsedFunctions do
8288 Enum . each ( clauses , & walk ( & 1 , state ) )
8389 end
8490
85- defp walk ( { _ , _args , _guards , body } , state ) do
91+ defp walk ( { _ , _args , _guards , body } , state ) do
8692 walk_block ( body , state )
8793 end
8894
89- defp walk ( { :-> , _ , [ [ { :when , _ , params } ] , body ] } , state ) do
95+ defp walk ( { :-> , _ , [ [ { :when , _ , params } ] , body ] } , state ) do
9096 guards = List . last ( params )
91- params = params |> Enum . reverse |> tl |> Enum . reverse
97+ params = params |> Enum . reverse ( ) |> tl |> Enum . reverse ( )
9298
9399 walk ( { [ ] , params , guards , body } , state )
94100 end
@@ -119,11 +125,11 @@ defmodule ElixirScript.FindUsedFunctions do
119125 end
120126
121127 defp walk ( { :%{} , _ , properties } , state ) do
122- Enum . each ( properties , fn ( val ) -> walk ( val , state ) end )
128+ Enum . each ( properties , fn val -> walk ( val , state ) end )
123129 end
124130
125131 defp walk ( { :<<>> , _ , elements } , state ) do
126- Enum . each ( elements , fn ( val ) -> walk ( val , state ) end )
132+ Enum . each ( elements , fn val -> walk ( val , state ) end )
127133 end
128134
129135 defp walk ( { := , _ , [ left , right ] } , state ) do
@@ -167,7 +173,7 @@ defmodule ElixirScript.FindUsedFunctions do
167173 end
168174
169175 defp walk ( { :cond , _ , [ [ do: clauses ] ] } , state ) do
170- Enum . each ( clauses , fn ( { :-> , _ , [ clause , clause_body ] } ) ->
176+ Enum . each ( clauses , fn { :-> , _ , [ clause , clause_body ] } ->
171177 Enum . each ( List . wrap ( clause_body ) , & walk ( & 1 , state ) )
172178 walk ( hd ( clause ) , state )
173179 end )
@@ -195,9 +201,10 @@ defmodule ElixirScript.FindUsedFunctions do
195201
196202 if rescue_block do
197203 Enum . each ( rescue_block , fn
198- { :-> , _ , [ [ { :in , _ , [ param , names ] } ] , body ] } ->
204+ { :-> , _ , [ [ { :in , _ , [ param , names ] } ] , body ] } ->
199205 walk ( { [ ] , [ param ] , [ { { :. , [ ] , [ Enum , :member? ] } , [ ] , [ param , names ] } ] , body } , state )
200- { :-> , _ , [ [ param ] , body ] } ->
206+
207+ { :-> , _ , [ [ param ] , body ] } ->
201208 walk ( { [ ] , [ param ] , [ ] , body } , state )
202209 end )
203210 end
@@ -234,10 +241,10 @@ defmodule ElixirScript.FindUsedFunctions do
234241
235242 [ do: expression , else: elses ] ->
236243 walk_block ( expression , state )
237- Enum . each ( elses , fn
238- { :-> , _ , [ left , right ] } ->
239- walk ( left , state )
240- walk ( right , state )
244+
245+ Enum . each ( elses , fn { :-> , _ , [ left , right ] } ->
246+ walk ( left , state )
247+ walk ( right , state )
241248 end )
242249 end )
243250 end
@@ -258,10 +265,13 @@ defmodule ElixirScript.FindUsedFunctions do
258265 cond do
259266 ElixirScript.Translate.Module . is_js_module ( module , state ) ->
260267 nil
268+
261269 ElixirScript.Translate.Module . is_elixir_module ( module ) ->
262270 walk_module ( module , function , length ( params ) , state . pid )
271+
263272 is_tuple ( module ) ->
264273 walk ( module , state )
274+
265275 true ->
266276 nil
267277 end
@@ -292,13 +302,15 @@ defmodule ElixirScript.FindUsedFunctions do
292302 case block do
293303 nil ->
294304 nil
305+
295306 { :__block__ , _ , block_body } ->
296307 Enum . each ( block_body , & walk ( & 1 , state ) )
308+
297309 b when is_list ( b ) ->
298310 Enum . each ( b , & walk ( & 1 , state ) )
311+
299312 _ ->
300313 walk ( block , state )
301314 end
302315 end
303-
304316end
0 commit comments