Skip to content

Commit eaf5b2a

Browse files
committed
Some more bug fixes. Have to figure out module resolution issues still
1 parent a3d1a76 commit eaf5b2a

File tree

1 file changed

+46
-19
lines changed

1 file changed

+46
-19
lines changed

lib/elixir_script/passes/find_used_modules.ex

Lines changed: 46 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)