@@ -15,16 +15,7 @@ defmodule ElixirScript.FindUsedModules do
1515 end )
1616 end
1717
18- defp do_execute ( module , pid ) do
19- result =
20- case ModuleState . get_in_memory_module ( pid , module ) do
21- nil ->
22- ElixirScript.Beam . debug_info ( module )
23-
24- beam ->
25- ElixirScript.Beam . debug_info ( beam )
26- end
27-
18+ defp do_execute ( module , result , pid ) do
2819 case result do
2920 { :ok , info } ->
3021 walk_module ( module , info , pid )
@@ -49,6 +40,21 @@ defmodule ElixirScript.FindUsedModules do
4940 end
5041 end
5142
43+ defp do_execute ( module , pid ) do
44+ result = get_debug_info ( module , pid )
45+ do_execute ( module , result , pid )
46+ end
47+
48+ defp get_debug_info ( module , pid ) do
49+ case ModuleState . get_in_memory_module ( pid , module ) do
50+ nil ->
51+ ElixirScript.Beam . debug_info ( module )
52+
53+ beam ->
54+ ElixirScript.Beam . debug_info ( beam )
55+ end
56+ end
57+
5258 defp walk_module (
5359 module ,
5460 % { attributes: [ __foreign_info__: % { path: path , name: name , global: global } ] } = info ,
@@ -159,10 +165,17 @@ defmodule ElixirScript.FindUsedModules do
159165 when is_atom ( form ) and form not in [ BitString , Function , PID , Port , Reference , Any , Elixir ] do
160166 if ElixirScript.Translate.Module . is_elixir_module ( form ) and
161167 ! ElixirScript.Translate.Module . is_js_module ( form , state ) do
162- ModuleState . put_used_module ( state . pid , state . module , form )
163-
164168 if ModuleState . get_module ( state . pid , form ) == nil do
165- do_execute ( form , state . pid )
169+ case get_debug_info ( form , state . pid ) do
170+ { :ok , _ } = result ->
171+ ModuleState . put_used_module ( state . pid , state . module , form )
172+ do_execute ( form , result , state . pid )
173+
174+ result ->
175+ do_execute ( form , result , state . pid )
176+ end
177+ else
178+ ModuleState . put_used_module ( state . pid , state . module , form )
166179 end
167180 end
168181 end
@@ -191,10 +204,17 @@ defmodule ElixirScript.FindUsedModules do
191204 defp walk ( { :% , _ , [ module , params ] } , state ) do
192205 if ElixirScript.Translate.Module . is_elixir_module ( module ) and
193206 ! ElixirScript.Translate.Module . is_js_module ( module , state ) do
194- ModuleState . put_used_module ( state . pid , state . module , module )
195-
196207 if ModuleState . get_module ( state . pid , module ) == nil do
197- do_execute ( module , state . pid )
208+ case get_debug_info ( module , state . pid ) do
209+ { :ok , _ } = result ->
210+ ModuleState . put_used_module ( state . pid , state . module , module )
211+ do_execute ( module , result , state . pid )
212+
213+ result ->
214+ do_execute ( module , result , state . pid )
215+ end
216+ else
217+ ModuleState . put_used_module ( state . pid , state . module , module )
198218 end
199219 end
200220
@@ -331,10 +351,17 @@ defmodule ElixirScript.FindUsedModules do
331351
332352 defp walk ( { :. , _ , [ module , function ] } , state ) do
333353 if ElixirScript.Translate.Module . is_elixir_module ( module ) do
334- ModuleState . put_used_module ( state . pid , state . module , module )
335-
336354 if ModuleState . get_module ( state . pid , module ) == nil do
337- do_execute ( module , state . pid )
355+ case get_debug_info ( module , state . pid ) do
356+ { :ok , _ } = result ->
357+ ModuleState . put_used_module ( state . pid , state . module , module )
358+ do_execute ( module , result , state . pid )
359+
360+ result ->
361+ do_execute ( module , result , state . pid )
362+ end
363+ else
364+ ModuleState . put_used_module ( state . pid , state . module , module )
338365 end
339366 else
340367 walk ( module , state )
0 commit comments