Skip to content

Commit 547862e

Browse files
committed
Add js module to atom table
1 parent 11f2f9f commit 547862e

File tree

3 files changed

+43
-5
lines changed

3 files changed

+43
-5
lines changed

lib/elixir_script/passes/create_js_modules.ex

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,15 @@ defmodule ElixirScript.Passes.CreateJSModules do
6565

6666
elixir = JS.variable_declaration([declarator], :const)
6767

68+
table_additions = Enum.map(opts.js_modules, fn
69+
{module, path} -> add_import_to_table(module)
70+
{module, path, _} -> add_import_to_table(module)
71+
end)
72+
6873
ast = opts.module_formatter.build(
6974
[],
7075
opts.js_modules,
71-
[elixir, start, load] ++ body,
76+
[elixir, create_atom_table(), start, load] ++ table_additions ++ body,
7277
JS.identifier("Elixir")
7378
)
7479

@@ -128,4 +133,37 @@ defmodule ElixirScript.Passes.CreateJSModules do
128133
)
129134
)
130135
end
136+
137+
defp create_atom_table() do
138+
JS.assignment_expression(
139+
:=,
140+
JS.member_expression(
141+
JS.identifier("Elixir"),
142+
JS.identifier("__table__")
143+
),
144+
JS.object_expression([])
145+
)
146+
end
147+
148+
defp add_import_to_table(module_name) do
149+
ref = ElixirScript.Translator.Identifier.make_namespace_members(module_name)
150+
JS.assignment_expression(
151+
:=,
152+
JS.member_expression(
153+
JS.member_expression(
154+
JS.identifier("Elixir"),
155+
JS.identifier("__table__")
156+
),
157+
JS.call_expression(
158+
JS.member_expression(
159+
JS.identifier("Symbol"),
160+
JS.identifier("for")
161+
),
162+
[JS.literal(ref.name)]
163+
),
164+
true
165+
),
166+
ref
167+
)
168+
end
131169
end

priv/std_lib/range.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ defmodule ElixirScript.Range do
33
defstruct first: nil, last: nil
44

55
def new(first, last) do
6-
%ElixirScript.Range{first: first, last: last}
6+
%Range{first: first, last: last}
77
end
88

9-
def range?(%ElixirScript.Range{}), do: true
9+
def range?(%Range{}), do: true
1010
def range?(_), do: false
1111

1212
end

src/javascript/lib/core/functions.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ function build_namespace(ns, ns_string) {
7777
parent = parent[part];
7878
}
7979

80-
root.__table = ns.__table || {};
81-
root.__table[Symbol.for(ns_string)] = parent;
80+
root.__table__ = ns.__table__ || {};
81+
root.__table__[Symbol.for(ns_string)] = parent;
8282

8383
return parent;
8484
}

0 commit comments

Comments
 (0)