Skip to content

Commit e3760d6

Browse files
committed
Rename Elixir import identifier to Bootstrap. Removed on_js_load and now look for start function
1 parent a1555d7 commit e3760d6

46 files changed

Lines changed: 495 additions & 475 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

lib/elixir_script.ex

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,10 @@ defmodule ElixirScript do
241241
to the specified location
242242
"""
243243
def copy_stdlib_to_destination(module_format, destination) do
244-
Enum.each(Path.wildcard(Path.join([operating_path, to_string(module_format), "elixir", "*.js"])), fn(path) ->
245-
base = Path.basename(path)
246-
File.mkdir_p!(Path.join([destination, "elixir"]))
247-
File.cp!(path, Path.join([destination, "elixir", base]))
248-
end)
244+
path = Path.join([operating_path, to_string(module_format), "elixir", "Elixir.Bootstrap.js"])
245+
base = Path.basename(path)
246+
File.mkdir_p!(destination)
247+
File.cp!(path, Path.join([destination, base]))
249248
end
250249

251250
#Gets path to js files whether the mix project is available

lib/elixir_script/module_systems/namespace.ex

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,15 @@ defmodule ElixirScript.ModuleSystems.Namespace do
66
alias ElixirScript.Translator.Utils
77

88
def build(module_name, imports, body, exports, env) do
9-
module_imports = Enum.map(imports, fn {module, path} ->
9+
module_imports = imports
10+
|> Enum.filter(fn
11+
{mod, _} ->
12+
case Module.split(mod) do
13+
["JS"] -> false
14+
_ -> true
15+
end
16+
end)
17+
|> Enum.map(fn {module, path} ->
1018
import_module(module, env)
1119
end)
1220

@@ -22,7 +30,7 @@ defmodule ElixirScript.ModuleSystems.Namespace do
2230
JS.member_expression(
2331
JS.call_expression(
2432
JS.member_expression(
25-
JS.identifier(:Elixir),
33+
JS.identifier(:Bootstrap),
2634
JS.member_expression(
2735
JS.identifier(:Core),
2836
JS.member_expression(
@@ -33,9 +41,9 @@ defmodule ElixirScript.ModuleSystems.Namespace do
3341
),
3442
[JS.identifier("Elixir"), JS.literal(Utils.name_to_js_file_name(module_name))]
3543
),
36-
JS.identifier("__make")
44+
JS.identifier("__load")
3745
),
38-
[]
46+
[JS.identifier("Elixir")]
3947
)
4048
)
4149

@@ -46,7 +54,7 @@ defmodule ElixirScript.ModuleSystems.Namespace do
4654
_self =
4755
JS.call_expression(
4856
JS.member_expression(
49-
JS.identifier(:Elixir),
57+
JS.identifier(:Bootstrap),
5058
JS.member_expression(
5159
JS.identifier(:Core),
5260
JS.member_expression(
@@ -60,7 +68,7 @@ defmodule ElixirScript.ModuleSystems.Namespace do
6068

6169
values = JS.member_expression(
6270
_self,
63-
JS.identifier("values")
71+
JS.identifier("__exports")
6472
)
6573

6674
_if = JS.if_statement(
@@ -75,7 +83,7 @@ defmodule ElixirScript.ModuleSystems.Namespace do
7583
end
7684

7785
declarator = JS.variable_declarator(
78-
JS.identifier("values"),
86+
JS.identifier("__exports"),
7987
exports
8088
)
8189

@@ -84,15 +92,15 @@ defmodule ElixirScript.ModuleSystems.Namespace do
8492
assign = JS.assignment_expression(
8593
:=,
8694
values,
87-
JS.identifier("values")
95+
JS.identifier("__exports")
8896
)
8997

90-
exports = [JS.return_statement(JS.identifier("values"))]
98+
exports = [JS.return_statement(JS.identifier("__exports"))]
9199

92100
make = JS.member_expression(
93101
JS.call_expression(
94102
JS.member_expression(
95-
JS.identifier(:Elixir),
103+
JS.identifier(:Bootstrap),
96104
JS.member_expression(
97105
JS.identifier(:Core),
98106
JS.member_expression(
@@ -103,10 +111,10 @@ defmodule ElixirScript.ModuleSystems.Namespace do
103111
),
104112
[JS.identifier("Elixir"), JS.literal(Utils.name_to_js_file_name(module_name))]
105113
),
106-
JS.identifier("__make")
114+
JS.identifier("__load")
107115
)
108116

109-
func_body = JS.block_statement([_if] ++ imports ++ body ++ [declaration, assign] ++ exports)
117+
func_body = JS.block_statement([_if] ++ body ++ [declaration, assign] ++ imports ++ exports)
110118

111119
func = JS.function_expression([JS.identifier("Elixir")], [], func_body)
112120
JS.assignment_expression(

lib/elixir_script/passes/create_js_modules.ex

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,45 @@ defmodule ElixirScript.Passes.CreateJSModules do
5656
end
5757

5858
defp compile(body, opts) do
59+
declarator = JS.variable_declarator(
60+
JS.identifier("Elixir"),
61+
JS.object_expression([])
62+
)
63+
64+
elixir = JS.variable_declaration([declarator], :const)
65+
66+
start = JS.assignment_expression(
67+
:=,
68+
JS.member_expression(
69+
JS.identifier("Elixir"),
70+
JS.identifier("start")
71+
),
72+
JS.function_expression(
73+
[JS.identifier(:app), JS.identifier(:args)],
74+
[],
75+
JS.block_statement([
76+
JS.call_expression(
77+
JS.member_expression(
78+
JS.call_expression(
79+
JS.member_expression(
80+
JS.identifier(:app),
81+
JS.identifier("__load")
82+
),
83+
[JS.identifier("Elixir")]
84+
),
85+
JS.identifier("start")
86+
),
87+
[ElixirScript.Translator.Primitive.make_atom(:normal), JS.identifier(:args)]
88+
)
89+
])
90+
)
91+
)
92+
93+
5994
ast = opts.module_formatter.build(
6095
[],
61-
[{:Elixir, "./Elixir.Bootstrap", true }] ++ opts.js_modules,
62-
body,
96+
[{:Bootstrap, "./Elixir.Bootstrap", true }] ++ opts.js_modules,
97+
[elixir, start] ++ body,
6398
JS.identifier("Elixir")
6499
)
65100

lib/elixir_script/translator.ex

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ defmodule ElixirScript.Translator do
9393

9494
defp do_translate({ one, two }, env) do
9595
quoted = quote do
96-
JS.new(Elixir.Core.Tuple, [unquote(one), unquote(two)])
96+
JS.new(Bootstrap.Core.Tuple, [unquote(one), unquote(two)])
9797
end
9898

9999
translate(quoted, env)
@@ -186,10 +186,6 @@ defmodule ElixirScript.Translator do
186186
{ %ElixirScript.Translator.Empty{}, env }
187187
end
188188

189-
defp do_translate({:@, _, [{:on_js_load, _, [value]}]}, env) do
190-
Call.make_function_call(value, [], env)
191-
end
192-
193189
defp do_translate({:@, _, [{name, _, [value]}]}, env) do
194190
{ Defmodule.make_attribute(name, value, env), env }
195191
end
@@ -277,7 +273,7 @@ defmodule ElixirScript.Translator do
277273
end
278274

279275
defp do_translate({{:., context1, [{:__aliases__, context2, [:Enum]}, function_name]}, context3, params }, env) do
280-
translate({{:., context1, [{:__aliases__, context2, [:Elixir, :Enum]}, function_name]}, context3, params }, env)
276+
translate({{:., context1, [{:__aliases__, context2, [:Bootstrap, :Enum]}, function_name]}, context3, params }, env)
281277
end
282278

283279
defp do_translate({{:., _, [{:__aliases__, _, [:JS]}, function_name]}, _, params }, env) when function_name in @generator_types do
@@ -465,7 +461,7 @@ defmodule ElixirScript.Translator do
465461

466462
defp do_translate({:{}, _, elements}, env) do
467463
quoted = quote do
468-
JS.new(Elixir.Core.Tuple, unquote(elements))
464+
JS.new(Bootstrap.Core.Tuple, unquote(elements))
469465
end
470466

471467
translate(quoted, env)

lib/elixir_script/translator/kernel/defimpl.ex

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ defmodule ElixirScript.Translator.Defimpl do
2424
])
2525

2626
%{
27-
name: Utils.quoted_to_name({:__aliases__, [], name }),
28-
std_lib: Defmodule.make_std_lib_import(env),
27+
name: Utils.quoted_to_name({:__aliases__, [], name }),
2928
imports: imports,
3029
exports: export,
3130
body: body,
@@ -38,7 +37,7 @@ defmodule ElixirScript.Translator.Defimpl do
3837
defp map_to_js({:__aliases__, _, [:Integer]}, _) do
3938
JS.member_expression(
4039
JS.member_expression(
41-
JS.identifier(:Elixir),
40+
JS.identifier(:Bootstrap),
4241
JS.identifier(:Core)
4342
),
4443
JS.identifier(:Integer)
@@ -48,7 +47,7 @@ defmodule ElixirScript.Translator.Defimpl do
4847
defp map_to_js({:__aliases__, _, [:Tuple]}, _) do
4948
JS.member_expression(
5049
JS.member_expression(
51-
JS.identifier(:Elixir),
50+
JS.identifier(:Bootstrap),
5251
JS.identifier(:Core)
5352
),
5453
JS.identifier(:Tuple)
@@ -66,7 +65,7 @@ defmodule ElixirScript.Translator.Defimpl do
6665
defp map_to_js({:__aliases__, _, [:BitString]}, _) do
6766
JS.member_expression(
6867
JS.member_expression(
69-
JS.identifier(:Elixir),
68+
JS.identifier(:Bootstrap),
7069
JS.identifier(:Core)
7170
),
7271
JS.identifier(:BitString)
@@ -76,7 +75,7 @@ defmodule ElixirScript.Translator.Defimpl do
7675
defp map_to_js({:__aliases__, _, [:Float]}, _) do
7776
JS.member_expression(
7877
JS.member_expression(
79-
JS.identifier(:Elixir),
78+
JS.identifier(:Bootstrap),
8079
JS.identifier(:Core)
8180
),
8281
JS.identifier(:Float)
@@ -90,7 +89,7 @@ defmodule ElixirScript.Translator.Defimpl do
9089
defp map_to_js({:__aliases__, _, [:PID]}, _) do
9190
JS.member_expression(
9291
JS.member_expression(
93-
JS.identifier(:Elixir),
92+
JS.identifier(:Bootstrap),
9493
JS.identifier(:Core)
9594
),
9695
JS.identifier(:PID)
@@ -99,14 +98,14 @@ defmodule ElixirScript.Translator.Defimpl do
9998

10099
defp map_to_js({:__aliases__, _, [:Port]}, _) do
101100
JS.member_expression(
102-
JS.identifier(:Elixir),
101+
JS.identifier(:Bootstrap),
103102
JS.identifier(:Port)
104103
)
105104
end
106105

107106
defp map_to_js({:__aliases__, _, [:Reference]}, _) do
108107
JS.member_expression(
109-
JS.identifier(:Elixir),
108+
JS.identifier(:Bootstrap),
110109
JS.identifier(:Reference)
111110
)
112111
end

lib/elixir_script/translator/kernel/defmodule.ex

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ defmodule ElixirScript.Translator.Defmodule do
1212
{ body, _ } = translate_body(body, env)
1313
%{
1414
name: ElixirScript.Temp,
15-
std_lib: make_std_lib_import(env),
1615
imports: [],
1716
body: body |> Group.inflate_groups,
1817
exports: nil,
@@ -24,7 +23,6 @@ defmodule ElixirScript.Translator.Defmodule do
2423
def make_module(module, nil, env) do
2524
%{
2625
name: module,
27-
std_lib: make_std_lib_import(env),
2826
imports: [],
2927
body: [],
3028
exports: nil,
@@ -39,7 +37,6 @@ defmodule ElixirScript.Translator.Defmodule do
3937

4038
result = %{
4139
name: Utils.quoted_to_name({:__aliases__, [], module }),
42-
std_lib: make_std_lib_import(env),
4340
imports: imports,
4441
exports: exported_object,
4542
body: body,
@@ -59,7 +56,6 @@ defmodule ElixirScript.Translator.Defmodule do
5956

6057
{structs, body} = extract_structs_from_body(body, env)
6158

62-
#Collect all the functions so that we can process their arity
6359
body = Enum.map(body, fn(x) ->
6460
case x do
6561
%ESTree.CallExpression{} ->
@@ -88,16 +84,6 @@ defmodule ElixirScript.Translator.Defmodule do
8884
{imports, body, exported_object}
8985
end
9086

91-
def make_std_lib_import(env) do
92-
compiler_opts = State.get(env.state).compiler_opts
93-
case compiler_opts.import_standard_libs do
94-
true ->
95-
{:Elixir, Utils.make_local_file_path(:elixir, compiler_opts.core_path, env), true }
96-
false ->
97-
nil
98-
end
99-
end
100-
10187
def process_module_refs(module_refs, env) do
10288
Enum.map(module_refs, fn(x) ->
10389
{x, ""}

lib/elixir_script/translator/kernel/defprotocol.ex

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ defmodule ElixirScript.Translator.Defprotocol do
2626
JS.identifier(Utils.name_to_js_name(name)),
2727
JS.call_expression(
2828
JS.member_expression(
29-
JS.identifier(:Elixir),
29+
JS.identifier(:Bootstrap),
3030
JS.member_expression(
3131
JS.identifier(:Core),
3232
JS.member_expression(
@@ -56,7 +56,7 @@ defmodule ElixirScript.Translator.Defprotocol do
5656
JS.identifier(implementation_name),
5757
JS.call_expression(
5858
JS.member_expression(
59-
JS.identifier(:Elixir),
59+
JS.identifier(:Bootstrap),
6060
JS.member_expression(
6161
JS.identifier(:Core),
6262
JS.member_expression(
@@ -80,7 +80,6 @@ defmodule ElixirScript.Translator.Defprotocol do
8080

8181
%{
8282
name: name,
83-
std_lib: Defmodule.make_std_lib_import(env),
8483
imports: imports ++ [{implementation_name_module, ""}],
8584
body: body,
8685
exports: JS.identifier(Utils.name_to_js_name(name)),

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ defmodule ElixirScript.Translator.Bitstring do
88
js_ast = JS.new_expression(
99
JS.member_expression(
1010
JS.member_expression(
11-
JS.identifier("Elixir"),
11+
JS.identifier(:Bootstrap),
1212
JS.identifier("Core")
1313
),
1414
JS.identifier("BitString")
@@ -88,7 +88,7 @@ defmodule ElixirScript.Translator.Bitstring do
8888
defp bitstring_class() do
8989
JS.member_expression(
9090
JS.member_expression(
91-
JS.identifier("Elixir"),
91+
JS.identifier(:Bootstrap),
9292
JS.identifier("Core")
9393
),
9494
JS.identifier("BitString")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule ElixirScript.Translator.Call do
1717
js_ast = JS.call_expression(
1818
JS.member_expression(
1919
JS.member_expression(
20-
JS.identifier("Elixir"),
20+
JS.identifier(:Bootstrap),
2121
JS.member_expression(
2222
JS.identifier("Core"),
2323
JS.identifier("Functions")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ defmodule ElixirScript.Translator.Function do
88

99
@patterns JS.member_expression(
1010
JS.member_expression(
11-
JS.identifier("Elixir"),
11+
JS.identifier(:Bootstrap),
1212
JS.identifier("Core")
1313
),
1414
JS.identifier("Patterns")

0 commit comments

Comments
 (0)