Skip to content

Commit e2348b2

Browse files
committed
Fix used module reference bugs
1 parent eaf5b2a commit e2348b2

File tree

5 files changed

+41
-26
lines changed

5 files changed

+41
-26
lines changed

lib/elixir_script/passes/find_used_modules.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ defmodule ElixirScript.FindUsedModules do
133133
Enum.each(clauses, &walk(&1, state))
134134
end
135135

136-
defp walk({_, _args, _guards, body}, state) do
136+
defp walk({_, args, guards, body}, state) do
137+
walk(args, state)
138+
walk(guards, state)
137139
walk_block(body, state)
138140
end
139141

lib/elixir_script/passes/output.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ defmodule ElixirScript.Output do
3333
defp filter_used_modules(used_modules, pid) do
3434
used_modules
3535
|> Enum.filter(fn module ->
36-
ModuleState.is_global_module(pid, module) == false
36+
module in ModuleState.list_javascript_modules(pid) == false
3737
end)
3838
end
3939

lib/elixir_script/passes/translate/forms/remote.ex

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ defmodule ElixirScript.Translate.Forms.Remote do
3333
:orddict,
3434
:filelib,
3535
:net_adm,
36-
:net_kernel,
36+
:net_kernel
3737
]
3838

3939
@doc """
@@ -46,31 +46,32 @@ defmodule ElixirScript.Translate.Forms.Remote do
4646

4747
def compile({:., _, [:erlang, :++]}, state) do
4848
ast = erlang_compat_function("erlang", "list_concatenation")
49-
{ ast, state }
49+
{ast, state}
5050
end
5151

5252
def compile({:., _, [:erlang, :--]}, state) do
5353
ast = erlang_compat_function("erlang", "list_substraction")
54-
{ ast, state }
54+
{ast, state}
5555
end
5656

5757
def compile({:., _, [:erlang, :"=<"]}, state) do
5858
ast = erlang_compat_function("erlang", "lessThanEqualTo")
59-
{ ast, state }
59+
{ast, state}
6060
end
6161

6262
def compile({:., _, [:erlang, :+]}, state) do
6363
ast = erlang_compat_function("erlang", "add")
64-
{ ast, state }
64+
{ast, state}
6565
end
6666

6767
def compile({:., _, [module, function]}, state) when module in @erlang_modules do
68-
ast = J.member_expression(
69-
Helpers.core_module(module),
70-
J.identifier(function)
71-
)
68+
ast =
69+
J.member_expression(
70+
Helpers.core_module(module),
71+
J.identifier(function)
72+
)
7273

73-
{ ast, state }
74+
{ast, state}
7475
end
7576

7677
def compile({:., _, [function_name]}, state) do
@@ -80,30 +81,39 @@ defmodule ElixirScript.Translate.Forms.Remote do
8081
def compile({:., _, [module, function]}, state) do
8182
function_name = ElixirScript.Translate.Identifier.make_function_name(function)
8283

83-
ast = J.member_expression(
84-
process_module_name(module, state),
85-
function_name
86-
)
84+
ast =
85+
J.member_expression(
86+
process_module_name(module, state),
87+
function_name
88+
)
8789

8890
{ast, state}
8991
end
9092

9193
def process_module_name(module, state) when is_atom(module) do
9294
cond do
95+
ElixirScript.Translate.Module.is_js_module(module, state) and
96+
ModuleState.is_global_module(state.pid, module) ->
97+
ElixirScript.Translate.Identifier.make_alias(Module.split(module) |> Enum.reverse())
98+
9399
ElixirScript.Translate.Module.is_js_module(module, state) ->
94100
process_js_module_name(module, state)
101+
95102
module === Elixir ->
96103
module
97104
|> ElixirScript.Output.module_to_name()
98-
|> J.identifier
105+
|> J.identifier()
106+
99107
module === :ElixirScript ->
100108
module
101109
|> ElixirScript.Output.module_to_name()
102-
|> J.identifier
110+
|> J.identifier()
111+
103112
ElixirScript.Translate.Module.is_elixir_module(module) ->
104113
module
105114
|> ElixirScript.Output.module_to_name()
106-
|> J.identifier
115+
|> J.identifier()
116+
107117
true ->
108118
ElixirScript.Translate.Identifier.make_identifier(module)
109119
end
@@ -117,12 +127,14 @@ defmodule ElixirScript.Translate.Forms.Remote do
117127
case ModuleState.get_js_module_name(state.pid, module) do
118128
name when is_binary(name) ->
119129
J.identifier(name)
130+
120131
name when is_atom(name) ->
121132
case to_string(name) do
122133
"Elixir." <> _ ->
123134
module
124135
|> ElixirScript.Output.module_to_name()
125-
|> J.identifier
136+
|> J.identifier()
137+
126138
x ->
127139
J.identifier(x)
128140
end

lib/elixir_script/passes/translate/identifier.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ defmodule ElixirScript.Translate.Identifier do
3838
def make_identifier(ast) do
3939
ast
4040
|> filter_name
41-
|> J.identifier
41+
|> J.identifier()
4242
end
4343

4444
def filter_name(reserved_word) when reserved_word in @js_reserved_words do
@@ -57,22 +57,23 @@ defmodule ElixirScript.Translate.Identifier do
5757
end
5858
end
5959

60-
defp make_alias([x]) do
60+
def make_alias([x]) do
6161
make_identifier(x)
6262
end
6363

64-
defp make_alias([h|t]) do
64+
def make_alias([h | t]) do
6565
J.member_expression(make_alias(t), make_identifier(h))
6666
end
6767

6868
def make_namespace_members(module_name) do
6969
case module_name do
7070
m when is_list(m) ->
7171
m
72+
7273
m when is_atom(m) ->
7374
Module.split(m)
7475
end
75-
|> Enum.reverse
76+
|> Enum.reverse()
7677
|> make_alias
7778
end
7879

@@ -84,5 +85,4 @@ defmodule ElixirScript.Translate.Identifier do
8485
def js_reserved_words() do
8586
@js_reserved_words
8687
end
87-
8888
end

lib/elixir_script/state.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ defmodule ElixirScript.State do
115115

116116
def is_global_module(pid, module) do
117117
Agent.get(pid, fn state ->
118-
result = Enum.find(state.js_modules, fn {mod, _, _} -> mod == module end)
118+
result =
119+
Enum.find(state.js_modules, fn {mod, _name, path} -> mod == module and path == nil end)
119120

120121
if result == nil, do: false, else: true
121122
end)

0 commit comments

Comments
 (0)