Skip to content

Commit c55680d

Browse files
committed
Add way to track modules that a module use
1 parent 3f8e363 commit c55680d

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

lib/elixir_script/passes/find_used_modules.ex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ defmodule ElixirScript.FindUsedModules do
9797
ModuleState.put_module(pid, module, %{protocol: true, impls: impls, functions: functions})
9898

9999
Enum.each(implementations, fn {impl, info} ->
100+
ModuleState.add_used_module(pid, module, impl)
100101
walk_module(impl, info, pid)
101102
end)
102103
end
@@ -136,6 +137,7 @@ defmodule ElixirScript.FindUsedModules do
136137
defp walk(form, state) when is_atom(form) and form not in [BitString, Function, PID, Port, Reference, Any, Elixir] do
137138
if ElixirScript.Translate.Module.is_elixir_module(form) and !ElixirScript.Translate.Module.is_js_module(form, state) do
138139
if ModuleState.get_module(state.pid, form) == nil do
140+
ModuleState.add_used_module(state.pid, state.module, form)
139141
do_execute(form, state.pid)
140142
end
141143
end
@@ -165,6 +167,7 @@ defmodule ElixirScript.FindUsedModules do
165167
defp walk({:%, _, [module, params]}, state) do
166168
if ElixirScript.Translate.Module.is_elixir_module(module) and !ElixirScript.Translate.Module.is_js_module(module, state) do
167169
if ModuleState.get_module(state.pid, module) == nil do
170+
ModuleState.add_used_module(state.pid, state.module, module)
168171
do_execute(module, state.pid)
169172
end
170173
end
@@ -300,6 +303,7 @@ defmodule ElixirScript.FindUsedModules do
300303
cond do
301304
ElixirScript.Translate.Module.is_elixir_module(module) ->
302305
if ModuleState.get_module(state.pid, module) == nil do
306+
ModuleState.add_used_module(state.pid, state.module, module)
303307
do_execute(module, state.pid)
304308
end
305309
true ->

lib/elixir_script/state.ex

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,21 @@ defmodule ElixirScript.State do
3131
end)
3232
end
3333

34+
def add_used_module(pid, module, used_module) do
35+
Agent.update(pid, fn(state) ->
36+
module_info = Keyword.get(state.modules, module)
37+
38+
used_module = Map.get(module_info, :used_module, [])
39+
used_module = Enum.uniq([used_module | used_module])
40+
41+
module_info = Map.put(module_info, :used_module, used_module)
42+
modules = Keyword.put(state.modules, module, module_info)
43+
44+
%{ state | modules: modules }
45+
end)
46+
end
47+
48+
3449
def has_used?(pid, module, func) do
3550
Agent.get(pid, fn(state) ->
3651
module_info = Keyword.get(state.modules, module)

0 commit comments

Comments
 (0)