Skip to content

Commit e42e595

Browse files
committed
Fixed removed_unused settings
1 parent f75c33a commit e42e595

File tree

6 files changed

+29
-48
lines changed

6 files changed

+29
-48
lines changed

lib/elixir_script/passes/remove_unused.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ defmodule ElixirScript.Passes.RemoveUnused do
1212

1313
data = Enum.reject(compiler_data.data, fn
1414
{_, %{type: :impl} = module_data} ->
15-
length(module_refs[module_data.implements]) == 0
15+
length(Keyword.get(module_refs, module_data.implements, [])) == 0
1616
{_, %{type: :consolidated} = module_data} ->
17-
length(module_refs[module_data.protocol]) == 0
17+
length(Keyword.get(module_refs, module_data.protocol, [])) == 0
1818
{module, module_data} ->
1919
cond do
2020
Enum.member?(module_data.functions, {:start, 2}) ->
2121
false
22-
length(module_refs[module]) > 0 ->
22+
length(Keyword.get(module_refs, module, [])) > 0 ->
2323
false
2424
true ->
2525
true

lib/elixir_script/translator.ex

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ defmodule ElixirScript.Translator do
185185
end
186186

187187
defp do_translate({:&, _, [{:/, _, [{{:., _, [module_name, function_name]}, _, []}, arity]}]}, env) do
188-
module_name = create_module_name2(module_name, env)
188+
module_name = create_module_name(module_name, env)
189189
js_ast = case module_name do
190190
{mod, :local} ->
191191
Capture.make_capture(mod, function_name, arity, env)
@@ -278,7 +278,7 @@ defmodule ElixirScript.Translator do
278278
expanded_ast = Macro.expand(ast, env.env)
279279

280280
if expanded_ast == ast do
281-
module_name = create_module_name2(module_name, env)
281+
module_name = create_module_name(module_name, env)
282282
case module_name do
283283
{mod, :local} ->
284284
Call.make_module_function_call(mod, function_name, env)
@@ -300,19 +300,11 @@ defmodule ElixirScript.Translator do
300300
end
301301
end
302302

303-
defp do_translate({{:., context1, [{:__aliases__, context2, [:Elixir, :Enum]}, function_name]}, context3, params }, env) do
304-
translate({{:., context1, [{:__aliases__, context2, [:Enum]}, function_name]}, context3, params }, env)
305-
end
306-
307-
defp do_translate({{:., context1, [{:__aliases__, context2, [:Enum]}, function_name]}, context3, params }, env) do
308-
translate({{:., context1, [{:__aliases__, context2, [:Bootstrap, :Enum]}, function_name]}, context3, params }, env)
309-
end
310-
311303
defp do_translate({{:., _, [{:__aliases__, _, _} = module_name, function_name]}, _, params } = ast, env) do
312304
expanded_ast = Macro.expand(ast, env.env)
313305

314306
if expanded_ast == ast do
315-
module_name = create_module_name2(module_name, env)
307+
module_name = create_module_name(module_name, env)
316308
case module_name do
317309
{mod, :local} ->
318310
Call.make_module_function_call(mod, function_name, params, env)
@@ -345,7 +337,7 @@ defmodule ElixirScript.Translator do
345337
end
346338

347339
defp do_translate({:__aliases__, _, aliases} = ast, env) do
348-
module_name = create_module_name2(ast, env)
340+
module_name = create_module_name(ast, env)
349341
case module_name do
350342
{mod, :local} ->
351343
Call.make_module_name(mod, env)
@@ -640,7 +632,7 @@ defmodule ElixirScript.Translator do
640632
end
641633
end
642634

643-
defp do_translate({ name, _, params }, env) when is_atom(params) do
635+
defp do_translate({ name, _context, params }, env) when is_atom(params) do
644636
cond do
645637
is_from_js_module(name, params, env) ->
646638
do_translate({{:., [], [{:__aliases__, [], [:JS]}, name]}, [], params }, env)
@@ -683,22 +675,6 @@ defmodule ElixirScript.Translator do
683675
end
684676

685677
def create_module_name(module_name, env) do
686-
case module_name do
687-
{:__aliases__, _, _} ->
688-
candiate_module_name = ElixirScript.Translator.State.get_module_name(env.state,
689-
Utils.quoted_to_name(module_name))
690-
691-
if ElixirScript.Translator.LexicalScope.get_module_name(env, candiate_module_name) in ElixirScript.Translator.State.list_module_names(env.state) do
692-
ElixirScript.Translator.LexicalScope.get_module_name(env, candiate_module_name)
693-
else
694-
module_name
695-
end
696-
_ ->
697-
module_name
698-
end
699-
end
700-
701-
def create_module_name2(module_name, env) do
702678
module_name = Utils.quoted_to_name(module_name)
703679
candiate_module_name = ElixirScript.Translator.State.get_module_name(env.state, module_name)
704680

lib/elixir_script/translator/kernel/special_forms/call.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ defmodule ElixirScript.Translator.Call do
3434
end
3535

3636
def make_module_function_call(module_name, function_name, params, env) do
37+
ElixirScript.Translator.State.add_module_reference(env.state, env.module, module_name)
38+
3739
members = ["Elixir"] ++ Module.split(module_name) ++ ["__load"]
3840

3941
ast = JS.call_expression(
@@ -51,6 +53,7 @@ defmodule ElixirScript.Translator.Call do
5153
end
5254

5355
def make_module_function_call(module_name, function_name, env) do
56+
ElixirScript.Translator.State.add_module_reference(env.state, env.module, module_name)
5457
make_module_function_call(module_name, function_name, [], env)
5558
end
5659

lib/elixir_script/translator/lexical_scope.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ defmodule ElixirScript.Translator.LexicalScope do
228228

229229
def add_import(env, module_name) do
230230
check_for_module_existence(env, module_name)
231+
ElixirScript.Translator.State.add_module_reference(env.state, env.module, module_name)
231232

232233
env = if ElixirScript.Translator.State.is_module_loaded?(env.state, module_name) do
233234
add_import_macro(env, module_name, [])
@@ -247,6 +248,7 @@ defmodule ElixirScript.Translator.LexicalScope do
247248

248249
def add_import(env, module_name, [only: :functions]) do
249250
module = get_module(env, module_name)
251+
ElixirScript.Translator.State.add_module_reference(env.state, env.module, module_name)
250252

251253
%{ env | functions: List.keydelete(env.functions, module_name, 0) ++ [{ module.name, module.functions }],
252254
requires: Enum.uniq(env.requires ++ [module.name])
@@ -263,6 +265,7 @@ defmodule ElixirScript.Translator.LexicalScope do
263265

264266
def add_import(env, module_name, [only: only]) do
265267
check_for_module_existence(env, module_name)
268+
ElixirScript.Translator.State.add_module_reference(env.state, env.module, module_name)
266269

267270
env = if ElixirScript.Translator.State.is_module_loaded?(env.state, module_name) do
268271
list = module_name.__info__(:macros)
@@ -288,6 +291,7 @@ defmodule ElixirScript.Translator.LexicalScope do
288291

289292
def add_import(env, module_name, [except: except]) do
290293
check_for_module_existence(env, module_name)
294+
ElixirScript.Translator.State.add_module_reference(env.state, env.module, module_name)
291295

292296
env = if ElixirScript.Translator.State.is_module_loaded?(env.state, module_name) do
293297
list = module_name.__info__(:macros)
@@ -312,6 +316,7 @@ defmodule ElixirScript.Translator.LexicalScope do
312316

313317
def add_require(env, module_name) do
314318
check_for_module_existence(env, module_name)
319+
ElixirScript.Translator.State.add_module_reference(env.state, env.module, module_name)
315320

316321
env = if ElixirScript.Translator.State.is_module_loaded?(env.state, module_name) do
317322
add_require_macro(env, module_name, [])
@@ -329,6 +334,7 @@ defmodule ElixirScript.Translator.LexicalScope do
329334

330335
def add_require(env, module_name, alias_name) do
331336
check_for_module_existence(env, module_name)
337+
ElixirScript.Translator.State.add_module_reference(env.state, env.module, module_name)
332338

333339
env = if ElixirScript.Translator.State.is_module_loaded?(env.state, module_name) do
334340
add_require_macro(env, module_name, [as: alias_name])

lib/elixir_script/translator/state.ex

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@ defmodule ElixirScript.Translator.State do
1111

1212
def start_link(compiler_opts, loaded_modules) do
1313
Agent.start_link(fn ->
14-
%{ compiler_opts: compiler_opts, modules: Keyword.new, std_lib_map: build_standard_lib_map(), loaded_modules: [JS | loaded_modules] }
14+
%{
15+
compiler_opts: compiler_opts,
16+
modules: Keyword.new,
17+
std_lib_map: build_standard_lib_map(),
18+
loaded_modules: [JS | loaded_modules],
19+
module_references: Keyword.new()
20+
}
1521
end)
1622
end
1723

@@ -120,27 +126,15 @@ defmodule ElixirScript.Translator.State do
120126
nil ->
121127
state
122128
module ->
123-
module = Map.update(module, :refs, [module_name], fn(x) -> Enum.uniq(x ++ [module_name]) end)
124-
modules = Keyword.put(state.modules, module.name, module)
125-
%{ state | modules: modules }
129+
module_references = Keyword.update(state.module_references, module.name, [module_name], fn(x) -> Enum.uniq(x ++ [module_name]) end)
130+
%{ state | module_references: module_references }
126131
end
127132
end)
128133
end
129134

130-
def get_module_references(pid, module_name) do
131-
case get_module(pid, module_name) do
132-
nil ->
133-
[]
134-
module ->
135-
Map.get(module, :refs, [])
136-
end
137-
end
138-
139135
def list_module_references(pid) do
140136
Agent.get(pid, fn(state) ->
141-
Enum.map(state.modules, fn {name, module} ->
142-
{name, Map.get(module, :refs, [])}
143-
end)
137+
state.module_references
144138
end)
145139
end
146140

test/app/src/main.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
defmodule Main do
22
def start(:normal, callback) do
3+
elem({1, 2}, 0)
4+
Enum.map([], fn(x) -> x end)
35
callback.("started")
46
end
57

0 commit comments

Comments
 (0)